android的网络编程分为2种:基于socket的,和基于http协议的。
Http通信
xml或者json为载体,相互通信数据。
JSON JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
Socket通信
SocketHttp不同的是两个的协议不同,socket是面向TCP/UDP协议的,http通信时面向HTTP协议的。
Android对于http网络通信,提供了标准的java接口——httpURLConnection接口,以及apache的接口——httpclient接口。其中我自己用的比较多的是httpclient这个接口,因为它的功能更为丰富很有效。
同时http通信也分为post方式和get的方式,两个相比较的话,post传送的数据量比较大,安全性也比较高。
Http通信
Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,通过Android单元测试来完成这四种方法。
java包中的HttpURLConnection
Get方式:
1. // Get方式请求
2. public
static
void requestByGet() throws Exception { 
3.     String path = "reg.163/logins.jsp?id=helloworld&pwd=android"
4.     // 新建一个URL对象
5.     URL url = new URL(path); 
6.     // 打开一个HttpURLConnection连接
7.     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 
8.     // 设置连接超时时间
9.     urlConn.setConnectTimeout(5 * 1000); 
10.     // 开始连接
11.     t(); 
12.     // 判断请求是否成功
13.     if (ResponseCode() == HTTP_200) { 
14.         // 获取返回的数据
15.         byte[] data = InputStream()); 
16.         Log.i(TAG_GET, "Get方式请求成功,返回数据如下:"); 
17.         Log.i(TAG_GET, new String(data, "UTF-8")); 
18.     } else
19.         Log.i(TAG_GET, "Get方式请求失败"); 
20.     } 
21.     // 关闭连接
22.     urlConn.disconnect(); 
23.
Post方式:
1. // Post方式请求
2. public
static
void requestByPost() throws Throwable { 
3.    String path = "reg.163/logins.jsp"
4.    // 请求的参数转换为byte数组
5.    String params = "id=" + de("helloworld", "UTF-8"
6.             + "&pwd=" + de("android", "UTF-8"); 
7.    byte[] postData = Bytes(); 
8.    // 新建一个URL对象
9.    URL url = new URL(path); 
10.    // 打开一个HttpURLConnection连接
11.    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 
12.    // 设置连接超时时间
13.    urlConn.setConnectTimeout(5 * 1000); 
14.    // Post请求必须设置允许输出
15.    urlConn.setDoOutput(true); 
16.    // Post请求不能使用缓存
17.    urlConn.setUseCaches(false); 
18.    // 设置为Post请求
19.    urlConn.setRequestMethod("POST"); 
20.    urlConn.setInstanceFollowRedirects(true); 
21.    // 配置请求Content-Type
22.    urlConn.setRequestProperty("Content-Type"
23.             "application/x-www-form-urlencode"); 
24.    // 开始连接
25.    t(); 
26.    // 发送请求参数
27.    DataOutputStream dos = new OutputStream()); 
28.    dos.write(postData); 
29.    dos.flush(); 
30.    dos.close(); 
31.    // 判断请求是否成功
32.    if (ResponseCode() == HTTP_200) { 
33.         // 获取返回的数据
34.         byte[] data = InputStream()); 
35.         Log.i(TAG_POST, "Post请求方式成功,返回数据如下:"); 
36.         Log.i(TAG_POST, new String(data, "UTF-8")); 
37.    } else
38.         Log.i(TAG_POST, "Post方式请求失败"); 
39.    } 
40.

 
org.apache.http包中的HttpGetHttpPost
Get方式:
1. // HttpGet方式请求
2. public
static
void requestByHttpGet() throws Exception { 
3.    String path = "reg.163/logins.jsp?id=helloworld&pwd=android"
4.    // 新建HttpGet对象
5.    HttpGet httpGet = new HttpGet(path); 
6.    // 获取HttpClient对象
7.    HttpClient httpClient = new DefaultHttpClient(); 
8.    // 获取HttpResponse实例
9.    HttpResponse httpResp = ute(httpGet); 
10.    // 判断是够请求成功
11.    if (StatusLine().getStatusCode() == HTTP_200) { 
12.         // 获取返回的数据
13.         String result = Entity(), "UTF-8"); 
14.         Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:"); 
15.         Log.i(TAG_HTTPGET, result); 
16.    } else
17.         Log.i(TAG_HTTPGET, "HttpGet方式请求失败"); 
18.    } 
19. socket通信报文格式
Post方式:
1. // HttpPost方式请求
2. public
static
void requestByHttpPost() throws Exception { 
3.    String path = "reg.163/logins.jsp"
4.    // 新建HttpPost对象
5.    HttpPost httpPost = new HttpPost(path); 
6.    // Post参数
7.    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
8.    params.add(new BasicNameValuePair("id", "helloworld")); 
9.    params.add(new BasicNameValuePair("pwd", "android")); 
10.    // 设置字符集
11.    HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); 
12.    // 设置参数实体
13.    httpPost.setEntity(entity); 
14.    // 获取HttpClient对象
15.    HttpClient httpClient = new DefaultHttpClient(); 
16.    // 获取HttpResponse实例
17.    HttpResponse httpResp = ute(httpPost); 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。