Android 簡便的異步Http連接框架

jopen 12年前發布 | 35K 次閱讀 Android Android開發 移動開發

【Android + Java】簡便的異步Http連接框架 

源代碼地址https://github.com/chenyoca/async-http-connection-core 

 * a multithread async http connection framework. it can be use on android project or common java project.

 * 一個多線程異步Http連接框架。它可用于Android項目或者一般Java項目。

## 特點
  •   **簡單** Async Http Connection為簡單的Http連接請求而設計,提供POST和GET兩個接口。通過參數和回調接口完成整個Http連接的交互。
  •  **輕量** 純JDK實現,不依賴第三方Jar包。
  •  **快速** 采用Executor多線程并發框架,秉承它的并發處理優勢。
  •  **可擴展** 框架提供Invoker擴展,通過實現RequestInvoker可方便的把HttpClient等優秀框架整合到項目中。

## 使用

更多例子見源目錄的**[test]**目錄

//使用Get方法,取得服務端響應流:
AsyncHttpConnection http = AsyncHttpConnection.getInstance();
ParamsWrapper params = ...;
String url = ...
int requestId = http.get(url, null, new ResponseCallback() {

    @Override
    public void onResponse(InputStream response,URL url) {
        System.out.println("[test GET] --> response back, url = "+url);
        Assert.assertNotNull(response);
        requestBack();
    }

    @Override
    public void onError(Throwable exp) {
        System.err.println("[test GET] --> response error, url = "+url);
        requestBack();
    }

    @Override
    public void onSubmit(URL url) {
    }
});
//使用POST方法,取得服務端響應流:
AsyncHttpConnection http = AsyncHttpConnection.getInstance();
ParamsWrapper params = ...;
String url = ...
int requestId = http.post(url, null, new ResponseCallback() {

    @Override
    public void onResponse(InputStream response,URL url) {
        System.out.println("[test POST] --> response back, url = "+url);
        Assert.assertNotNull(response);
        requestBack();
    }

    @Override
    public void onError(Throwable exp) {
        System.err.println("[test POST] --> response error, url = "+url);
        requestBack();
    }

    @Override
    public void onSubmit(URL url) {
    }
});

### 更詳細的例子 

//使用POST方法,取得服務端響應流:
AsyncHttpConnection http = AsyncHttpConnection.getInstance();
final int KEY_VAL = 24;
ParamsWrapper params = new ParamsWrapper();
params.put("firstname", "chen");
params.put("lastname", "yoca");
params.put("foo", KEY_VAL);
params.put("cookiename", KEY_VAL);
params.put("cookievalue", KEY_VAL);
int requestId = http.post(url, params, new StringResponseHandler() {

    @Override
    public void onSubmit(URL url) { 
        System.out.println(">> target: "+url.getHost()+" --> "+url.getPath());
    }

    @Override
    public void onError(Throwable exp) {
        requestBack();
        exp.printStackTrace();
    }

    @Override
    public void onResponse(String content, URL url) {
        Assert.assertNotNull(content);
        boolean containsKey = content.contains(String.valueOf(KEY_VAL));
        Assert.assertEquals(true, containsKey);
        requestBack();
    }
});


//在大量并發的異步請求情況下,每個請求的回調可能需要一個標識碼來標記這個回調結果。
//有兩種方式來解決這個問題:
// 1、使用get和post返回的RequestID來標識,但這需要對RequestID進行管理
// 2、使用get和post的token參數

AsyncHttpConnection http = AsyncHttpConnection.getInstance();
final int KEY_VAL = 24;
ParamsWrapper params = new ParamsWrapper();
params.put("firstname", "chen");
params.put("lastname", "yoca");
params.put("foo", KEY_VAL);
params.put("cookiename", KEY_VAL);
params.put("cookievalue", KEY_VAL);

//  ******** 利用token 接口 ************
Object token = "1234566";

// 如果調用了帶token的方法,回調的方法將是onResponse(String content, URL url, Object token)
int requestId = http.post(url, params, token, new StringResponseHandler() {

    @Override
    public void onSubmit(URL url) { 
        System.out.println(">> target: "+url.getHost()+" --> "+url.getPath());
    }

    @Override
    public void onError(Throwable exp) {
        requestBack();
        exp.printStackTrace();
    }

    @Override
    public void onResponse(String content, URL url, Object token) {
        // token == "1234566" Token被傳到這里作為標識
        Assert.assertNotNull(content);
        boolean containsKey = content.contains(String.valueOf(KEY_VAL));
        Assert.assertEquals(true, containsKey);
        requestBack();
    }
});

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!