【Android + Java】简便的异步Http连接框架
【Android+Java】简便的异步Http连接框架
源代码地址:https://github.com/chenyoca/async-http-connection
*一个多线程异步Http连接框架。它可用于Android项目或者一般Java项目。
##特点
- **简单**AsyncHttpConnection为简单的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(); } });
相关推荐
huavhuahua 2020-09-05
magic00 2020-08-03
风萧萧梦潇 2020-06-14
jiejie 2020-06-02
pengjin 2020-05-14
kururunga 2020-05-07
fengyeezju 2020-04-26
PrisonJoker 2020-04-16
fengyeezju 2020-04-07
hqulyc 2020-03-05
fengyeezju 2020-02-09
fengyeezju 2020-02-02
Urchindong 2020-01-21
fengyeezju 2020-01-11
绿豆饼 2020-01-05
csdnuuu 2019-12-27