Android网络请求的第三库AsyncHttpclient
2016-01-26 15:21
204 查看
项目的官方网站:http://loopj.com/android-async-http/;对应的github地址https://github.com/loopj/android-async-http
它是专门针对Android在Apache的HttpClient基础上构建的异步的callback-based http client。所有的请求全在UI线程之外发生,而callback发生在创建它的线程中,应用了Android的Handler发送消息机制。你也可以把AsyncHttpClient应用在Service中或者后台线程中,库代码会自动识别出它所运行的context。它的feature包括:
1. 发送异步http请求,在匿名callback对象中处理response
2. http请求发生在UI线程之外;
3. 内部采用线程池来处理并发请求;
4. GET/POST 参数构造,通过RequestParams类。
5. 内置多部分文件上传,不需要第三方库支持;
6. 流式Json上传,不需要额外的库;
7. 能处理环行和相对重定向;
8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
9. 自动智能的请求重试机制在各种各样的移动连接环境中;
10. 自动的gzip响应解码;
11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
13. 通过BaseJsonHttpResponseHandler和各种json库集成;
14. 支持SAX解析器;
15. 支持各种语言和content编码,不仅仅是UTF-8。
AsyncHttpclient的使用简单的可以分为3步:
1.创建AsyncHttpclient
2.(根据你的需要,是否需要上传参数)上传参数
3.进行网络请求请求
代码如下:
它是专门针对Android在Apache的HttpClient基础上构建的异步的callback-based http client。所有的请求全在UI线程之外发生,而callback发生在创建它的线程中,应用了Android的Handler发送消息机制。你也可以把AsyncHttpClient应用在Service中或者后台线程中,库代码会自动识别出它所运行的context。它的feature包括:
1. 发送异步http请求,在匿名callback对象中处理response
2. http请求发生在UI线程之外;
3. 内部采用线程池来处理并发请求;
4. GET/POST 参数构造,通过RequestParams类。
5. 内置多部分文件上传,不需要第三方库支持;
6. 流式Json上传,不需要额外的库;
7. 能处理环行和相对重定向;
8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
9. 自动智能的请求重试机制在各种各样的移动连接环境中;
10. 自动的gzip响应解码;
11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
13. 通过BaseJsonHttpResponseHandler和各种json库集成;
14. 支持SAX解析器;
15. 支持各种语言和content编码,不仅仅是UTF-8。
AsyncHttpclient的使用简单的可以分为3步:
1.创建AsyncHttpclient
AsyncHttpclient httpclient=new AsyncHttpclient();
2.(根据你的需要,是否需要上传参数)上传参数
RequestParams params = new RequestParams(); params.put("key", "value"); params.put("more", "data");
3.进行网络请求请求
httpclient.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 } });****如果你想的链接返回的是String,只需要这时只需要匿名实现一个TextHttpResponseHandle,其继承自AsyncHttpResponse,并将原生的字节流根据指定的encoding转化成了string对象。
代码如下:
AsyncHttpClient client = new AsyncHttpClient();****如果你想的链接返回的是json,只需要这时只需要匿名实现一个JsonHttpResponseHandler。
RequestParams params = new RequestParams(); params.put("key", "value"); params.put("more", "data");
client.get("http://www.google.com", params, new
TextHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, String response) {
System.out.println(response);
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) {
Log.d("ERROR", error);
}
}
);
String url = "https://ajax.googleapis.com/ajax/services/search/images"; AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); params.put("q", "android"); params.put("rsz", "8"); client.get(url, params, new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { // Handle resulting parsed JSON response here } @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { // Handle resulting parsed JSON response here } });注意:将android-async-http第三方的库引进项目中,有可能会因为cz.msebera.android.httpclient.Header[] headers找不到而报错,所以将另外一个jar包的链接地址给大家,一同引入项目即可。httpclient.jar包连接:http://mvnrepository.com/artifact/cz.msebera.android/httpclient/4.3.6。
相关文章推荐
- 理解HTTP幂等性
- AngualrJS中每次$http请求时的一个遮罩层Directive
- linux网络子系统内核分析
- android Xutils Http模块分析
- JAVA利用HttpClient进行POST请求(HTTPS)
- DHT网络存储设计
- 项目修炼之路(2)测试-TCPCopy
- java网络编程(一)使用TCP协议完成客户端与服务端的数据传递
- http头文件User-Agent详解
- http header详解
- SGU 176 Flow construction-上下界网络流
- VirtualBox配置网络以及SSH登陆配置
- 网络资源:常用的图表类库插件
- Ubuntu NetworkManager 使用:Ubuntu的wired Networks 变灰色,无法连接网络
- CentOS minimal安装后网络配置
- QT5网络相关(QNetworkAccessManager)
- 查看 并发请求数及其TCP连接状态【转】
- centos下的网络设置
- Windows 无法连接到无线网络
- JMeter监控服务器CPU, 内存,网络数据