Android的HTTP方式网络通讯---HttpURLConnection

   Android的网络通讯机制,毫无置疑是用来和网络打交道的。通讯方式分为两种:Http方式和Socket方式。Socket通讯方式和Java中的没有什么区别,这个不是咱们今天说的重点。重点的是http通讯方式,咱们来看看她的如山真面目吧。
html

   一:Http通讯方式分类
java

   (1)HttpURLConnection方式
android

   (2)HttpClient方式(这一种咱们明日再叙)
缓存

   二:Http的请求方法
安全

   有两种方法:post方法和get方法。主要区别以下:
服务器

   相同点:两者都可以向服务器端传送数据,而服务器端根据请求返回相应的数据后,关闭链接;
网络

   不一样点:(1)get方法传送的数据量小,不能大于2KB,post传递的则较大,通常不受限制
app

                (2)post方法传递的参数值,不会显示在URL上,而get传递的则会显示在URL上
jsp

                (3)post安全性较高,get安全性较低ide

   三:HttpURLConnection请求方法--Get

   在操做以前,咱们应该本身搭建一个服务器,而且写一个服务器端的文件,这里我写的文件功能为,根据传递的参数全不为空的状况下,输出字符串的拼接形式。具体文件以下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%
    String a = request.getParameter("a");
    String b = request.getParameter("b");
    if(a!=null&&b!=null){
    out.println(a + b);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    }else {
        out.print("error");
    }
%>

   ◆具体步骤:

   能够在主界面上添加一个按钮,在按钮单击事件触发时产生以下操做,说白了,就是把一下的操做放到按钮的监听事件中,就OK了。

   (1)定义一个字符串,值为服务器地址,因为这里是get方式进行请求数据,因此参数的传递方式为:URL地址?键=值&键=值&。。。等,这里的键要和服务器中接收时的键相对应。

//服务器的地址,注意这里的参数传递方式,要直接写在URL后面。形式为:?键=值&键=值
                String urlStr = "http://222.27.166.10:8080/MyServer/youcan.jsp?a=Hello&b=word";

   (2)建立URL对象,并将上述服务器地址字符串转化成URL地址

URL url = new URL(urlStr);//将服务器地址字符串变为URL形式

   (3)建立HttpURLConnection对象,经过URL对象的openConnection打开网址,注意此时只是打开网址

HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开网址

   (4)经过HttpURLConnection对象的connect方法进行与服务器的连接,这时才能够与服务器打交道

conn.connect();// 连接

   (5)经过HttpURLConnection的getInputStream方法得到输入流,对服务器的返回数据进行读取操做

in = conn.getInputStream();// 得到输入流
BufferedReader br = new BufferedReader(
new InputStreamReader(in));//得到输入流的包装流
String str = null;//存储读取出的一行数据
StringBuffer sb = new StringBuffer();//字符串数据的拼接
    while ((str = br.readLine()) != null) {//作判断是否是读完了
    sb.append(str);//若没读完,则拼接
                    }
System.out.println(sb.toString());// 输出的是服务器返回的值

   (6)特别重要的一点:要在Manifest.xml文件中添加访问网络的权限,android中全部的关于网络通讯的操做均须要加上权限。

<uses-permission android:name="android.permission.INTERNET" />

   ◆结果:在后台输出了字符串的拼接样式

01-07 15:55:54.622: INFO/System.out(618): Helloword

   四:HttpURLConnection请求方法--Post

   在这里咱们一样使用上述的服务器文件,返回字符串的拼接。

   ◆具体步骤:

   (1)定义一个字符串,值为服务器地址,因为这里是post方式进行请求数据,因此参数不能直接写在URL后面,注意。

//服务器地址,注意这里是post传递方式不能直接进行传参
                String urldata = "http://222.27.166.10:8080/MyServer/youcan.jsp";

   (2)建立URL对象,并将上述服务器地址字符串转化成URL地址

url = new URL(urldata);

   (3)建立HttpURLConnection对象,经过URL对象的openConnection打开网址,注意此时只是打开网址

//打开网址
conn = (HttpURLConnection) url.openConnection();

   (4)设置HttpURLConnection对象的相关属性,以下

//设置post方式不能缓存数据
conn.setUseCaches(false);
//设置传参的方式为post
conn.setRequestMethod("POST");
//设置输出流
conn.setDoOutput(true);
//设置输入流
conn.setDoInput(true);

   (5)经过HttpURLConnection对象的connect方法进行与服务器的连接,这时才能够与服务器打交道

//开始链接
conn.connect();

   (6)经过HttpURLConnection对象的getOutputStream方法得到输出流,将传递的参数写入到其中。

//获得输出流,写参数到Server中
out  =conn.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
//传递参数的方式,经过输出流写数据的方式URLEncoder.encode的参数为“键对应的值”,"编码方式"
                    dos.writeBytes("a="+URLEncoder.encode("quanquan", "utf-8"));
DataOutputStream dos1 = new DataOutputStream(out);
//传递参数的方式,经过输出流写数据的方式URLEncoder.encode的参数为“键对应的值”,"编码方式"
                    dos1.writeBytes("b="+URLEncoder.encode("quanquan", "utf-8"));

   (7)经过HttpURLConnection对象的getInputStream方法得到输入流,对服务器的返回数据进行读取操做

//得到输入流,获得返回的数据
in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//进行返回数据的读取
String line = null;
StringBuffer sb = new StringBuffer();                     
                    while((line=br.readLine())!=null){
sb.append(line);
                    }
System.out.println(sb.toString());

   ◆结果:经过在控制台输出结果

01-07 15:55:54.622: INFO/System.out(618): quanquanquanquan

   

   Android通讯方式还有不少,可能这些方式喜欢的人各有不一样,你们就哪一个用的习惯来哪一个吧,这里我说的也不是很很全面,敬请谅解哈。

相关文章
相关标签/搜索