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