1. 概要

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

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

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

2.1. 标准Java接口

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

· 创建 URL 以及 URLConnection / HttpURLConnection 对象

· 设置连接参数

· 连接到服务器

· 向服务器写数据

· 从服务器读取数据

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.URL;

importjava.net.URLConnection;

importjava.net.HttpURLConnection;

try{

//创建一个URL对象

URLurl=newURL(your_url);

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

URLConnectionconnection=url.openConnection(Proxy_yours);

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

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

//HttpURLConnectionconnection=

(HttpURLConnection)url.openConnection(Proxy_yours);

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

connection.setConnectTimeout(10000);

connection.addRequestProperty("User-Agent",

"J2me/MIDP2.0");

//连接到服务器

connection.connect();

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

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

OutputStreamoutStream=connection.getOutputStream();

ObjectOutputStreamobjOutput=newObjectOutputStream(outStream);

objOutput.writeObject(newString("thisisastring..."));

objOutput.flush();

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

InputStreamin=connection.getInputStream();

//处理数据

...

}catch(Exceptione){

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

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

}

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 操作

· 处理服务器返回结果

importorg.apache.http.HttpEntity;

importorg.apache.http.HttpHost;

importorg.apache.http.HttpResponse;

importorg.apache.http.auth.AuthScope;

importorg.apache.http.auth.UsernamePasswordCredentials;

importorg.apache.http.client.methods.HttpGet;

importorg.apache.http.conn.params.ConnRoutePNames;

importorg.apache.http.params.HttpConnectionParams;

importorg.apache.http.client.params.HttpClientParams;

try{

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

HttpParamsparams=newBasicHttpParams();

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

HttpConnectionParams.setConnectionTimeout(params,20*1000);

HttpConnectionParams.setSoTimeout(params,20*1000);

HttpConnectionParams.setSocketBufferSize(params,8192);

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

HttpClientParams.setRedirecting(params,true);

//设置useragent

HttpProtocolParams.setUserAgent(params,userAgent);

//创建一个HttpClient实例

//注意HttpClienthttpClient=newHttpClient();CommonsHttpClient

//中的用法,在Android1.5中我们需要使用Apache的缺省实现DefaultHttpClient

HttpClienthttpClient=newDefaultHttpClient(params);

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

HttpGethttpGet=newHttpGet("http://www.test_test.com/");

HttpResponseresponse=client.execute(httpGet);

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

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

httpGet.abort();

}

//读取更多信息

Header[]headers=response.getHeaders();

HttpEntityentity=response.getEntity();

Headerheader=response.getFirstHeader("Content-Type");

}catch(Exceptionee){

//

}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{

HttpClienthttpClient=newHttpClient();

//设置认证的数据

httpClient.getCredentialsProvider().setCredentials(

newAuthScope("your_auth_host",80,"your_realm"),

newUsernamePasswordCredentials("username","password"));

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

HttpHosttargetHost=newHttpHost("www.test_test.com",443,"https");

//设置代理

HttpHostproxy=newHttpHost("192.168.1.1",80);

httpClient.getParams().setParameter

(ConnRoutePNames.DEFAULT_PROXY,proxy);

//创建一个HttpGet实例

HttpGethttpGet=newHttpGet("/a/b/c");

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

HttpResponseresponse=httpClient.execute(targetHost,httpGet);

//读取应答数据

intstatusCode=response.getStatusLine().getStatusCode();

Header[]headers=response.getHeaders();

HttpEntityentity=response.getEntity();

}catch(Exceptionee){

//

2.3. Android接口

android.net.* 实际上是通过对 Apache HttpClient 的封装来实现的一个 HTTP 编程接口,同时还提供了 HTTP 请求队列管理, 以及 HTTP 连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等接口。

以下是一个通过 AndroidHttpClient 访问服务器的最简例子:

importimportandroid.net.http.AndroidHttpClient;

try{

AndroidHttpClientclient=AndroidHttpClient.newInstance(“your_user_agent”);

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

HttpGethttpGet=newHttpGet("http://www.test_test.com/");

HttpResponseresponse=client.execute(httpGet);

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

//错误处理

}

//关闭连接

client.close();

}catch(Exceptionee){

//

}

import import android.net.http.AndroidHttpClient;

try {

AndroidHttpClient client = AndroidHttpClient.newInstance(“your_user_agent”);

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

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

HttpResponse response = client.execute(httpGet);

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

// 错误处理

}

// 关闭连接

client.close();

} catch (Exception ee) {

//

}

另外当我们的应用需要同时从不同的主机获取数目不等的数据,并且仅关心数据的完整性而不关心其先后顺序时,也可以使用这部分的接口。典型用例就是 android.webkit 在转载网页和下载网页资源时,具体可参考 android.webkit.* 中的相关实现。

更多相关文章

  1. Android(安卓)TextView 丰富多彩的字体样式代码
  2. Android通知权限设置(8.0上下兼容)
  3. android 4.4 设置全屏
  4. 如何设置Android的AVD模拟器可以输入中文
  5. android绑定远程服务以及android接口定义语言(aidl)
  6. android 关于Location of the Android(安卓)SDK has not been se
  7. Android各种访问权限Permission详解
  8. Android机顶盒 获取当前连接网络的Ip地址
  9. android java 文件 设置 对应 layout 下 布局文件.xml

随机推荐

  1. 如何学习linux
  2. 无线不能连接故障又一例
  3. VMware ESXi 6.5补丁升级
  4. js基础:变量与常量的声明以及函数知识
  5. javascript基础(一)
  6. 一淘邀请码JAG42一淘密令的输入方法
  7. 再见,Python!你好,Go语言
  8. 坚果云和亿方云哪个最好用?
  9. HBase优化实战
  10. NLP新尝试:如何让机器读懂并预测人类的喜