网络连接时应用的最基本的功能之一,Android系统对网络连接进行了封装,使得开发者能够更快的给应用增加网络功能。大多数网络连接的Android应用使用HTTP发送和接受数据,Android包括两个HTTP客户端:HttpURLConnection和Apache HttpClient。开发者可以使用这两个客户端中的任意一个去完成网络连接。
1, 网络连接的基本步骤:
(1)增加权限:manifest文件中必须包含以下权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
(2)检查网络状态,利用ConnectivityManager 的getActiveNetworkInfo()和isConnected()方法执行检查。如下:
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// 获取数据
} else {
// 显示错误
}
(3)在独立线程中执行网络连接:网络操作涉及不可预知的延迟,为了防止不良的用户体验,通常的做法是从UI中独立出线程去执行网络连接操作。
(4)连接并下载数据,以HttpURLConnection
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
is = conn.getInputStream();
(5)流对象转换为字符串对象
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
2,HttpClient与HttpURLConnection的对比。
HttpClient与HttpURLConnection都支持HTTPS,流上传和下载, 可配置的超时,IPv6以及连接池。因此两个都可以完成基本的网络操作。
HttpClient是Apache开源组织提供的一个开源的项目,Android把它集成了进去。拥有众多的Api,实现比较稳定,bug少。但同时也由于HttpClient的API数量过多,使得开发者很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。
HttpURLConnection是一种多用途、轻量级的HTTP客户端。他的Api比较简单,开发者比较容易使用以及对它进行扩展。但缺点是Android2.3之前的版本存在一些Bug,如:对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效等。Android2.3系统对这些问题进行了修复,并增加了一些HTTPS方面的改进。在Android
4.0版本中,又添加了一些响应的缓存机制,而且Google团队会持续去对HttpURLConnection进行优化。
一般建议2.3之前的系统使用HttpClient,而2.3及其之后的版本使用HttpURLConnection。