Android 簡便的異步Http連接框架
【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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!