Android网络编程之总结
Android平台继承了java所支持的网络方式,还引进了Apache的Http的扩展包,并且提供单独的API(WIFI,蓝牙等)。所以在Android平台中,总共提供了3中网络接口,分别是:
(1) java.net.*(Java标准接口)
(2) org.apache(Apache接口)
(3) android.net.*(Android网络接口)
1.标准Java接口
java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见 Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。这些在Java网络编程中均有涉及,我们看一个简单的socket编程,实现服务器回发客户端信息。
(1) TCP/IP的Socket、ServerSocket
(2) UDP的DatagramSocket、DatagramPackage
(3) 直接URL的HttpURLConnection
使用这个类的一般步骤:
1.通过URL.openConnection() 方法获取一个HttpURLConnection对象,并且将结果强制转化为HttpURLConnection类型。
2.准备请求(prepare the request),包括URI,headers中的各种属性等
(Request headersmay also include metadata such as credentials, preferred content types, andsession cookies.)
3.请求体(optionally)。如果有请求体那么setDoOutput(true)必须为true,然后把输入放在getOutputStream()流中。
4.读取响应。响应的headers一般包括了一些metadata比如响应体的内容类型和长度,修改日期以及session cookies。响应体可以从getInputStream()流中读出。
5.断开连接。响应体被读出之后,应该调用 disconnect()方法来断开连接。
2.Apache接口
对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache的 HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。
HttpClient
httpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。从文档 上看,HttpClient有三个已知的实现类分别 是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,会发现有一个专门为 Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能,但是既然开发的 是Android应用程序,还是使用Android专有的实现类,一定有其优势。
AndroidHttpClient与DefaultHttpClient比较:
1. AndroidHttpClient定义在android.net.http.AndroidHttpClient包下,属于Android原生的http访问,而DefaultHttpClient定义在org.apache.http.impl.client.DefaultHttpClient包下,属于对apche项目的支持。而AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
2. AndroidHttpClient对于DefaultHttpClient做了一些改进,使其更使用用于Android项目。
DefaultHttpClient
先看看使用DefaultHttpClient方式发送Web站点请求,上面已经简要说明了步骤,在这里简要说明一个参数的传递问题,对于GET方式,只需要拼接字符串就在URL结尾即可,但是对于POST方式,需要传递HttpEntity对象,HttpEntity为一个接口,有多个实现类,可以使用其间接子继承,UrlEncodedFormEntity类来保存请求参数,并传递给HttpPost。
AndroidHttpClient
需要注意的是,AndroidHttpClient是一个final类,也没有公开的构造函数,所以无法使用new的形式对其进行实例化,必须使用AndroidHttpClient.newInstance()方法获得AndroidHttpClient对象。
能过Apache HTTP来访问HTTP资源三步曲:
1.创建HttpGet或者HttpPost对象,将要请求的URL对象构造方法传入HttpGet、HttpPost对象
2.通过HttpClent接口的实现类DefaultClent.excute(HttpUriRequest request)而我们已经知道HttpGet和HttpPost类都实现了HttpUriRequest接口,所以这里面,我们可以将第1步创建好的 HttpGet或者HttpPost对象传入进来。来得到HttpResponse对象
3.通过HttpResponse取到返回的一些信息,再做提取
3.android.net编程:
常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。这里不详细讲。
(1) 使用WebService
(2) 直接使用WebView视图组件显示网页
自己总结的图:很粗糙(有待修改)
(待修改)