Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Asynchronous Http Client--Android 開源的網絡異步加載類

Android Asynchronous Http Client--Android 開源的網絡異步加載類

編輯:關於Android編程

 

Android Asynchronous Http Client(AHC)

一個回調式的Android網絡請求庫

概括:

AHC是基於Apache的HttpClient 庫,所有的網絡請求過程在UI線程之外進行,而回調是在Handler裡面處理。也可以再Service或者後台程序裡面使用,這個庫會自動識別並在相應的Context進行處理。

特點:

異步發送HTTP請求,在回調函數中處理響應HTTP請求過程不在UI線程進行使用線程池來管理並發數支持GET/POST請求參數單獨設置無需其他庫上傳序列化JSON數據處理重定向體積小,只有90K針對不同的網絡連接對重試次數進行智能優化支持gzip二進制通信協議使用BinaryHttpResponseHandler處理
內置Json解析,使用JsonHttpResponseHandler對響應進行處理使用FileAsyncHttpResponseHandler直接將響應保存到文件中動態保存Cookie,將Cookie保存到應用的SharedPreferences中使用BaseJsonHttpResponseHandler可以搭配Jackson JSON,Gson或者其他的Json反序列化庫支持SAX解析,使用SaxAsyncHttpResponseHandler支持多語言多種編碼方式,不只是UTF-8

誰在用

Instagram,Pinterest,Pose。。。。

怎麼用

MVN:

    com.loopj.android
    android-async-http
    1.4.5
導包:
import com.loopj.android.http.*;
創建一個AsyncHttpClient 對象並發送一個請求:
client.get(http://www.google.com, new AsyncHttpResponseHandler() {

    @Override
    public void onStart() {
        // called before request is started
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        // called when response HTTP status is 200 OK
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        // called when response HTTP status is 4XX (eg. 401, 403, 404)
    }

    @Override
    public void onRetry(int retryNo) {
        // called when request is retried
	}
});

 

推薦用法:定義一個靜態的Http Client

新建一個網絡工具類,定義一個全局靜態的Http Client。

 

 

import com.loopj.android.http.*;

public class TwitterRestClient {
  private static final String BASE_URL = http://api.twitter.com/1/;

  private static AsyncHttpClient client = new AsyncHttpClient();

  public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.get(getAbsoluteUrl(url), params, responseHandler);
  }

  public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }

  private static String getAbsoluteUrl(String relativeUrl) {
      return BASE_URL + relativeUrl;
  }
}

就很容易的在需要請求網路的地方發送 網絡請求:

 

 

import org.json.*;
import com.loopj.android.http.*;

class TwitterRestClientUsage {
    public void getPublicTimeline() throws JSONException {
        TwitterRestClient.get(statuses/public_timeline.json, null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                // If the response is JSONObject instead of expected JSONArray
            }
            
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                // Pull out the first event on the public timeline
                JSONObject firstEvent = timeline.get(0);
                String tweetText = firstEvent.getString(text);

                // Do something with the response
                System.out.println(tweetText);
            }
        });
    }
}

API文檔http://loopj.com/android-async-http/doc/com/loopj/android/http/AsyncHttpClient.html

 

使用PersistentCookieStore保存Cookie

這個庫包含一個PersistentCookieStore ,這個類是Apache HttpClient CookieStore 接口的實現,它可以自動將cookies保存到SharedPreferences 。 如果你需要使用cookie保持認證會話,這將是特別重要的,因為即使用戶關掉了應用仍然可以登錄狀態。 首先,創建一個AsyncHttpClient對象:
AsyncHttpClient myClient = new AsyncHttpClient();

現在將client的Cookie保存到一個PersistentCookieStore,構造方法需要有一個上下文(Activity,Application都可以,通常this就OK了)。
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);

所有從server獲取到的數據都持續的保存。 如果想自己設定cookie,只需要創建一個新的cookie,並調用addCookie:
BasicClientCookie newCookie = new BasicClientCookie(cookiesare, awesome);
newCookie.setVersion(1);
newCookie.setDomain(mydomain.com);
newCookie.setPath(/);
myCookieStore.addCookie(newCookie);

詳情請看 PersistentCookieStore Javadoc


使用RequestParams來添加GET/POST請求參數

類RequestParams 用來為請求添加請求參數,RequestParams 可以有好幾種方法進行創建和設置。 1.創建一個空的RequestParams 然後添加參數:
RequestParams params = new RequestParams();
params.put(key, value);
params.put(more, data);
2.創建一個帶有一對參數的RequestParams
RequestParams params = new RequestParams(single, value);
3.創建一個帶有Map的RequestParams
HashMap paramMap = new HashMap();
paramMap.put(key, value);
RequestParams params = new RequestParams(paramMap);
詳情請參考:RequestParams Javadoc

使用RequestParams上傳文件

RequestParams 可以支持多媒體文件上傳,可以通過以下方式實現: 1.將一個Inputstream添加到將要上傳的RequestParams
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put(secret_passwords, myInputStream, passwords.txt);
2.File方式
File myFile = new File(/path/to/file.png);
RequestParams params = new RequestParams();
try {
    params.put(profile_picture, myFile);
} catch(FileNotFoundException e) {}
3.byte數組形式
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put(soundtrack, new ByteArrayInputStream(myByteArray), she-wolf.mp3);

詳情:RequestParams Javadoc

使用FileAsyncHttpResponseHandler下載二進制文件

類FileAsyncHttpResponseHandler 可以用來獲取二進制文件,如圖片,語音等文件:
AsyncHttpClient client = new AsyncHttpClient();
client.get(http://example.com/file.png, new FileAsyncHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, File response) {
        // Do something with the file `response`
    }
});

詳情: FileAsyncHttpResponseHandler Javadoc

添加基本的認證憑證

一些請求可能需要類似username/password 的憑證
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth(username,password/token);
client.get(http://example.com);

當然你也可以定制
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth(username,password, new AuthScope(example.com, 80, AuthScope.ANY_REALM));
client.get(http://example.com);

詳情:RequestParams Javadoc
說明文檔:http://loopj.com/android-async-http/ GITHUB地址:https://github.com/loopj/android-async-http MVN地址:http://central.maven.org/maven2/com/loopj/android/android-async-http/
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved