转自:http://hi.baidu.com/honey_lonely/blog/item/fa10b003e2b3638ce950cd1c.html

1. 概要

本文主要介绍在Android平台上开发网络应用的一些常用接口。

2. Android平台上可以使用的几种网络接口

Android平台的网络应用绝大部分都是基于Java的编程接口的,也就是说我们开发类似的运用的时候可以有多种选择,比J2me确实好多了。

2.1. 标准Java接口

java.net.*下面提供了访问 HTTP 服务的基本功能。使用这部分接口的基本操作主要包括:

· 创建 URL 以及 URLConnection / HttpURLConnection 对象

· 设置连接参数

· 连接到服务器

· 向服务器写数据

· 从服务器读取数据

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URL;

import java.net.URLConnection;

import java.net.HttpURLConnection;



try {

// 创建一个 URL 对象

URL url = new URL(your_url);



// 创建一个 URL 连接,如果有代理的话可以指定一个代理。

URLConnection connection = url.openConnection(Proxy_yours);

// 对于 HTTP 连接可以直接转换成 HttpURLConnection,

// 这样就可以使用一些 HTTP 连接特定的方法,如 setRequestMethod() 等

//HttpURLConnection connection =

(HttpURLConnection)url.openConnection(Proxy_yours);



// 在开始和服务器连接之前,可能需要设置一些网络参数

connection.setConnectTimeout(10000);

connection.addRequestProperty("User-Agent",

"J2me/MIDP2.0");



// 连接到服务器

connection.connect();



// 往服务器写数据,数据会暂时被放到内存缓存区中

// 如果仅是一个简单的 HTTP GET,这一部分则可以省略

OutputStream outStream = connection.getOutputStream();

ObjectOutputStream objOutput = new ObjectOutputStream(outStream);

objOutput.writeObject(new String("this is a string..."));

objOutput.flush();



// 向服务器发送数据并获取应答

InputStream in = connection.getInputStream();



// 处理数据

...



} catch (Exception e) {

// 网络读写操作往往会产生一些异常,所以在具体编写网络应用时

// 最好捕捉每一个具体以采取相应措施

}

2.2. Apache接口

Apache HttpClient 是一个开源项目,弥补了 java.net.* 灵活性不足的缺点,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。早期的 Android 曾同时包括 Commons HttpClient (org.apache.commons.httpclient.*) 和 HttpComponents (org.apache.http.client.* ),不过当前版本 (1.5) 中开发者只能使用后者,也就是说类似以下的一些类:

使用这部分接口的基本操作与 java.net.* 基本类似,主要包括:

· 创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等对象

· 设置连接参数

· 执行 HTTP 操作

· 处理服务器返回结果

import org.apache.http.HttpEntity;

import org.apache.http.HttpHost;

import org.apache.http.HttpResponse;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.conn.params.ConnRoutePNames;

import org.apache.http.params. HttpConnectionParams;

import org.apache.http.client.params. HttpClientParams;



try {

// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)

HttpParams params = new BasicHttpParams();



// 设置连接超时和 Socket 超时,以及 Socket 缓存大小

HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);

HttpConnectionParams.setSoTimeout(params, 20 * 1000);

HttpConnectionParams.setSocketBufferSize(params, 8192);



// 设置重定向,缺省为 true

HttpClientParams.setRedirecting(params, true);



// 设置 user agent

HttpProtocolParams.setUserAgent(params, userAgent);



// 创建一个 HttpClient 实例

// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient

// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient

HttpClient httpClient = new DefaultHttpClient(params);



// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向

HttpGet httpGet = new HttpGet ("http://www.test_test.com/");



HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

// 错误处理,例如可以在该请求正常结束前将其中断

httpGet.abort();

}



// 读取更多信息

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

Header header = response.getFirstHeader("Content-Type");

} catch (Exception ee) {

//

} finally {

// 释放连接

client.getConnectionManager().shutdown();

}

import org.apache.http.HttpEntity;

import org.apache.http.HttpHost;

import org.apache.http.HttpResponse;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.conn.params.ConnRoutePNames;

import org.apache.http.params. HttpConnectionParams;

import org.apache.http.client.params. HttpClientParams;

try {

// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)

HttpParams params = new BasicHttpParams();

// 设置连接超时和 Socket 超时,以及 Socket 缓存大小

HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);

HttpConnectionParams.setSoTimeout(params, 20 * 1000);

HttpConnectionParams.setSocketBufferSize(params, 8192);

// 设置重定向,缺省为 true

HttpClientParams.setRedirecting(params, true);

// 设置 user agent

HttpProtocolParams.setUserAgent(params, userAgent);



// 创建一个 HttpClient 实例

// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient

// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient

HttpClient httpClient = new DefaultHttpClient(params);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向

HttpGet httpGet = new HttpGet ("http://www.test_test.com/");

HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

// 错误处理,例如可以在该请求正常结束前将其中断

httpGet.abort();

}

// 读取更多信息

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

Header header = response.getFirstHeader("Content-Type");

} catch (Exception ee) {

//

} finally {

// 释放连接

client.getConnectionManager().shutdown();

}

以下例子以 HttpGet 方式通过代理访问 HTTPS 网站:

try {

HttpClient httpClient = new HttpClient();



// 设置认证的数据

httpClient.getCredentialsProvider().setCredentials(

new AuthScope("your_auth_host", 80, "your_realm"),

new UsernamePasswordCredentials("username", "password"));



// 设置服务器地址,端口,访问协议

HttpHost targetHost = new HttpHost("www.test_test.com", 443, "https");



// 设置代理

HttpHost proxy = new HttpHost("192.168.1.1", 80);

httpClient.getParams().setParameter

(ConnRoutePNames.DEFAULT_PROXY, proxy);



// 创建一个 HttpGet 实例

HttpGet httpGet = new HttpGet("/a/b/c");



// 连接服务器并获取应答数据

HttpResponse response = httpClient.execute(targetHost, httpGet);



// 读取应答数据

int statusCode = response.getStatusLine().getStatusCode();

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

} catch (Exception ee) {

//

更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content
  2. android中SharedPreferences和PreferenceActivity的存取数据
  3. android复制数据库到SD卡(网上搜集,未经验证)
  4. Android 实现蓝牙客户端与服务器端通信
  5. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
  6. Android 数据存储
  7. Android手机客户端与Servlet交换数据

随机推荐

  1. android动态布局方法总结
  2. android studio使用.gitignore建立项目过
  3. 仿美团首页功能选择的实现
  4. Android 监听各个Acitivity的生命周期
  5. Android弹出多选框下拉框的实例
  6. RK PX30 make clean清android之后再次编
  7. Android培训班(110)start_kernel函数7
  8. mt6735平台wifi漫游阈值
  9. Android(安卓)游戏引擎libgdx 资源加载进
  10. Android调用WebService