Android开发使用URLConnection进行网络编程详解

作者:飘走的我 时间:2022-01-07 22:49:28 

本文实例讲述了Android开发使用URLConnection进行网络编程。分享给大家供大家参考,具体如下:

URL的openConnection()方法将返回一个URLConnection,该对象表示应用程序和URL之间的通信连接,程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源。通常创建一个和URL的连接,并发送请求,读取此URL引用的资源。

需要如下步骤:

a)通过调用URL对象openConnection()方法来创建URLConnection对象

b)设置URLConnection的参数和普通请求属性


conn.setRequestProperty("accept","*/*");
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

发送POST请求必须设置如下两行

conn.setDoInput(true):设置该URLConnection的doInput请求头字段的值
coon.setDoOutput(true):

c)调用connect():打开到此URL引用的资源的通信链接(如果尚未建立这样的连接)。

如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用.
URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。
在创建对象之后,建立连接之前,可指定各种选项(例如doInput和UseCaches).连接后再进行设置就会发生错误。连接后才能进行的操作(例如getContentLength),如有必要,将隐式执行连接.

d)如果只是发送GET方式请求,使用connect方法建立和远程资源之间的实际连接即可,在请求的地址中传入数据。

如果需要发送Post方法请求。需要获取URLConnection实例对应的输出流来发送请求参数,


PrintWriter out=new PrintWriter(conn.getOutputStream());
//解决乱码问题
String n=EncodingUtils.getString("张三".getBytes(),"UTF-8");
out.write("name="+n+"&pwd="+pwd);
out.flush();//刷新输出流的缓冲

e)远程资源变为可用,程序可以访问远程资源的头字段或通过输入流读取远程资源的数据。

getInputStream()获取输入流。

从输入流读取response的数据。

注意:

1)如果既要使用输入流读取URLConnection响应的内容,也要使用输出流发送请求参数,一定要先使用输出流,再使用输入流。

2)借助于URLConnection类的帮助,应用程序可以非常方便地与指定站点交换信息,包括发送GET请求,POST请求,并获取网站的响应等。

代码编写步骤如下:

1.先写一个服务器-web工程

新建一个Servlet--LoginServlet,简单实现用户的登录~


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 public LoginServlet() {
   // TODO Auto-generated constructor stub
 }
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   // TODO Auto-generated method stub
   doPost(request, response);
 }
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   // TODO Auto-generated method stub
   String name=request.getParameter("name");
   String pwd=request.getParameter("pwd");
   System.out.println(name+"  "+pwd);
   OutputStream os=response.getOutputStream();
   if("xuxu".equals(name)&&"123".equals(pwd)){
     os.write(("成功").getBytes("UTF-8"));
   }else{
     os.write(("失败").getBytes("UTF-8"));
   }
   os.flush();
   os.close();
 }
}

2.新建一个android项目,在MainActivity中分别使用get方法和post方法实现用户的登录


public class MainActivity extends Activity {
 private EditText name,pwd;
 public void get(View view){
   new Thread(){
     public void run() {
       try {
         URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet"+
       "?name="+name+"&pwd="+pwd);
         URLConnection conn=url.openConnection();
         conn.connect();//真正的建立网络连接
         BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
         String line=null;
         StringBuffer stringBuffer=new StringBuffer();//字符串,都可以存储和操作字符串,它是变量
         while ((line=reader.readLine())!=null) {
           stringBuffer.append(line);
         }
         System.out.println(stringBuffer.toString());
       } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
       }
     };
   }.start();
 }
 public void post(View view){
   new Thread(){
     public void run() {
       try {
         URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet"
       );
         URLConnection conn=url.openConnection();
         //必须设置
         conn.setDoInput(true);
         conn.setDoOutput(true);
         conn.connect();//真正的建立网络连接
         PrintWriter printWriter=new PrintWriter(conn.getOutputStream());
         printWriter.write("name="+name+"&pwd="+pwd);
         printWriter.flush();
         printWriter.close();
         BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
         String line=null;
         StringBuffer stringBuffer=new StringBuffer();
         while ((line=reader.readLine())!=null) {
           stringBuffer.append(line);
         }
         System.out.println(stringBuffer.toString());
       } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
       }
     };
   }.start();
 }
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   name=(EditText) findViewById(R.id.name);
   pwd=(EditText) findViewById(R.id.pwd);
 }
}

3.运行,把Tomcat打开~

效果图如下:

Android开发使用URLConnection进行网络编程详解

附:完整实例代码点击此处本站下载

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/qq_33642117/article/details/51999561

标签:Android,URLConnection
0
投稿

猜你喜欢

  • Java动态代理分析及理解

    2021-10-21 14:59:58
  • Java线程休眠的5种方法

    2022-02-21 04:49:48
  • SpringBoot打Jar包在命令行运行流程详解

    2023-11-24 16:53:59
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    2022-10-22 10:36:31
  • C# 将透明图片的非透明区域转换成Region的实例代码

    2021-10-25 19:28:05
  • 关于Java中的IO流总结(推荐)

    2023-08-23 18:13:56
  • Android获取设备传感器的方法

    2022-10-07 10:50:16
  • SpringBoot解决BigDecimal传到前端后精度丢失问题

    2021-12-13 14:44:39
  • Java正则验证正整数的方法分析【测试可用】

    2022-08-02 21:50:05
  • spring异步service中处理线程数限制详解

    2021-09-02 23:20:12
  • MyBatis多对多关联映射创建示例

    2023-08-09 06:40:10
  • Android实现读写USB串口数据

    2023-10-21 19:12:56
  • java使用正则表达校验手机号码示例(手机号码正则)

    2022-04-07 20:37:04
  • Spring Cloud Gateway 如何修改HTTP响应信息

    2021-07-20 13:33:40
  • 解决spring mvc 多数据源切换,不支持事务控制的问题

    2022-09-30 03:39:56
  • Linux系统中C语言编程创建函数fork()执行解析

    2023-06-21 01:10:03
  • java 三种将list转换为map的方法详解

    2023-09-13 03:35:39
  • java中List接口与实现类介绍

    2022-11-17 02:54:40
  • Android结合xml实现帧动画

    2023-10-07 22:57:51
  • android UI绘制加减号按钮

    2023-09-11 02:55:28
  • asp之家 软件编程 m.aspxhome.com