kieven2008的专栏

Android网络编程概述

首先,应该了解的几个问题:

1)Android平台网络相关API接口

a) java.net.*(标准Java接口)

java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。这些在Java网络编程中均有涉及。

b) Org.apache接口

对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。

c)Android.net.*(Android网络接口)

常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。

2)网络架构主要有两种模式B/S,C/S

B/S—-》就是浏览器/服务器端模式了,通过应用层的HTTP协议通信,不需要特定客户端软件,而是需要统一规范的客户端,,简而言之就是Android网络浏览器(如chrome,UcWeb,QQ浏览器等等)访问web服务器端的方式了。

C/S—–》就客户端/服务器端模式,通过任意的网络协议通信,需要特定的客户端软件。

3)服务器端返回客户端的内容有三种方式:

a)以HTML代码的形式返回。

b)以XML字符串的形式返回,做Android开发时这种方式比较多。返回的数据需要通过XML解析(SAX、DOM,Pull,等)器进行解析(必备知识)。

c)以json对象的方式返回。

Android的网络编程分为2种:基于http协议的,和基于socket的

一、HTTP协议

基于TCP/IP协议之上的协议

1.1HttpURLConnection连接URL1)创建一个URL对象

URL url = new URL();

2)利用HttpURLConnection对象从网络中获取网页数据

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

3)设置连接超时

conn.setConnectTimeout(6*1000);

4)对响应码进行判断

if (conn.getResponseCode() != 200) //从Internet获取网页,发送请求,将网页以流的形式读回来

throw new RuntimeException("请求url失败");

5)得到网络返回的输入流

InputStream is = conn.getInputStream();6)String result = readData(is, "GBK"); //文件流输入出文件用outStream.write7)conn.disconnect();

总结:–记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作.–返回的响应码200,是成功.–在Android中对文件流的操作和JAVA SE上面是一样的.–在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上.–操作大文件是,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到.–对文件流操作完,要记得及时关闭.

1.2向服务器端发送请求参数步骤:1)创建URL对象:URL realUrl = new URL(requestUrl);2)通过HttpURLConnection对象,向网络地址发送请求

HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();3)设置容许输出:conn.setDoOutput(true);4)设置不使用缓存:conn.setUseCaches(false);5)设置使用POST的方式发送:conn.setRequestMethod("POST");6)设置维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");7)设置文件字符集:conn.setRequestProperty("Charset", "UTF-8");8)设置文件长度:conn.setRequestProperty("Content-Length", String.valueOf(data.length));9)设置文件类型:conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

10)设置HTTP请求头

conn.setRequestProperty("Accept“,” image/gif,image/jpeg,image/pjpeg,image/pjpeg,application/x-shockwave-flash,application/xaml+xml,application/vnd.ms-xpsdocument,application/x-ms-xbap,application/x-ms-application,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*");

设置语言:conn.setRequestProperty("Accept-Language“,"zh-CN");

conn.setRequestProperty("

conn.setRequestProperty("11)以流的方式输出.总结:–发送POST请求必须设置允许输出–不要使用缓存,容易出现问题.–在开始用HttpURLConnection对象的setRequestProperty()设置,就是生成HTML文件头.

1.3.向服务器端发送xml数据(也称为实体Entity)XML格式是通信的标准语言,Android系统也可以通过发送XML文件传输数据.1)将生成的XML文件写入到byte数组中,并设置为UTF-8:byte[] xmlbyte = xml.toString().getBytes("UTF-8");3)获得链接:HttpURLConnection conn = (HttpURLConnection) url.openConnection();4)设置连接超时:conn.setConnectTimeout(6* 1000);5)设置允许输出conn.setDoOutput(true);6)设置不使用缓存:conn.setUseCaches(false);7)设置以POST方式传输:conn.setRequestMethod("POST");8)维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");9)设置字符集:conn.setRequestProperty("Charset", "UTF-8");10)设置文件的总长度:conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));11)设置文件类型:conn.setRequestProperty("Content-Type","text/xml; charset=UTF-8");12)以文件流的方式发送xml数据:outStream.write(xmlbyte);总结:–我们使用的是用HTML的方式传输文件,这个方式只能传输一般在5M一下的文件.–传输大文件不适合用HTML的方式,传输大文件我们要面向Socket编程.确保程序的稳定性–将地址和参数存到byte数组中:byte[] data = params.toString().getBytes();

1.4 利用Apache的HttpClient实现Android客户端发送实体Entity

那里面非常漂亮,个个观景区都能看到奇形怪状的岩石。

kieven2008的专栏

相关文章:

你感兴趣的文章:

标签云: