1. 程式人生 > >Android非同步網路請求--AsyncHttpClient

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);