標籤:httpclient 網路 httpurlconnection
網路連接時應用的最基本的功能之一,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。
【 Android官方文檔讀書筆記】串連網路