Android非同步網路請求--AsyncHttpClient
Android中網路請求一般使用Apache HTTP Client或者採用HttpURLConnect,但是直接使用這兩個類庫需要寫大量的程式碼才能完成網路post和get請求,而使用android-async-http這個庫可以大大的簡化操作,它是基於Apache’s HttpClient ,所有的請求都是獨立在UI主執行緒之外,通過回撥方法處理請求結果,採用android Handler message 機制傳遞資訊。
零用錢裡網路請求使用的便是這種非同步網路請求,查閱了一些資料做了總結。
android-async-http 開源框架可以使我們輕鬆地獲取網路資料或者向伺服器傳送資料,最關鍵的是,它是非同步框架,在底層使用執行緒池處理併發請求,效率很高,使用又特別簡單。
以往我們在安卓上做專案,比如要下載很多圖片、網頁或者其他的資源,多數開發者會選擇一個執行緒一個下載任務這種模型,因為安卓自帶的 AndroidHttpClient 或者 java 帶的 java.net.URL ,預設都是阻塞式操作。這種模型效率不高,對併發要求高的 APP 來講,並不適用。
AsyncHttpClient 作為 android-async-http 框架的一個核心應用類,使用簡單,可以處理文字、二進位制等各種格式的 web 資源。下面
AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三個類使用方法
AsyncHttpClient
public class AsyncHttpClient extends java.lang.Object
該類通常用在android應用程式中建立非同步GET, POST, PUT和DELETE HTTP請求,請求引數通過RequestParams例項建立,響應通過重寫匿名內部類 ResponseHandlerInterface的方法處理。
AsyncHttpClient client = new AsyncHttpClient(true, HostConstant.getHttpPort(), HostConstant.getHttpsPort());
請求方法
1. AsyncHttpClient.post(arg0,arg1,arg2);
2.
AsyncHttpClient.get(arg0,arg1,arg2);
arg0:是你post請求的url
arg1:是要傳送給伺服器的資料 ,他是
RequestParams
public class RequestParams extends java.lang.Object
用於建立AsyncHttpClient例項中的請求引數
RequestParams params = new RequestParams();
params.put("username", "xiaowen");
params.put("password", "123456");
AsyncHttpResponseHandler
用於攔截和處理由AsyncHttpClient建立的請求。
AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
};
onFailure()
如果請求失敗了,就會執行該方法,其餘方法就都不執行了,用於提示使用者網路出現故障
onSuccess()
是請求成功後,伺服器就會返回statusCode,headers以及responseBody,通過判斷statusCode和解析respinseBody來獲取網路返回資料
檢視該類的原始碼還包括onStart()
,onFinish()
,onRetry
等方法。
onStart()
方法是開始傳送請求的時候執行的,一般是把progressDialog放在這裡面顯示,提示使用者等待
onFinish()
當傳送請求成功後,就執行onFinish()
零用錢網路請求程式碼分析
1.請求處理:
PMHttpResponseHandler handler = new PMHttpResponseHandler() {
@Override
public void onRequestCompletion(Map responseMap, Object tag) {
}
@Override
public Object getRequestName() {
}
@Override
public PMRequestQueue.Request getRequest() {
}
};
PMHttpResponseHandler是AsyncHttpResponseHandler的子類,在PMHttpResponseHandler中包含抽象方法onRequestCompletion()
, getRequestName()
, getRequest()
,並且實現了父類的 onSuccess()
和 onFailure()
方法
2.傳送請求:
PMNetworkKit.getInstance(handler).post(url,param);