Android针对http请求的第三方开源框架AsynHttpClient
来源:互联网 发布:青岛seo排名工具 编辑:程序博客网 时间:2024/05/18 00:00
android-async-http AsyncHttpClient是一个非常好的Android针对http请求的开源框架。
AsyncHttpClient 是一个框架提供的库 可以异步传输,使用时需下载android-async-http-1.4.4.jar包导入到项目中
下载地址:http://loopj.com/android-async-http
在Android的开发中,发送和处理http请求是非常常见的事,但是对于http请求处理到处是充斥着又长又臭的代码。通常为了一个小小的数据,就要写大量代码。
因为针对最简单的case,我只需要提供request url,成功时的callback和(或)失败时的callback,仅此而已。针对这一类问题(需求),可以说android-async-http提供了几乎完美的解决方案。
特别是async关键字,看到这个字都知道,这是异步执行,也就是说它的网络请求自动在非UI线程里执行,你不需要任何额外的操作(比如手动new一个Thread之类)。
项目的官方网站: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。
它有哪些特点:
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
使用AsynHttpClient发送http异步请求只需要实现以下步骤:
1. 创建一个AsyncHttpClient;
2. (可选的)通过RequestParams对象设置请求参数;
3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。
如下是我在项目运用中的代码块:
/***构建httpClient实例对象 * 应用级别的HttpClient单例模式 * @since 2014-4-14 10:46:26 */public class AsyncHttpClient extends com.loopj.android.http.AsyncHttpClient { public final static int TIME_OUT = 15000; private AsyncHttpClient() {//私有化构造器 } private static AsyncHttpClient mClient; public static AsyncHttpClient getInstance() {//供外界获取实例,保证唯一性 if (mClient == null) { mClient = new AsyncHttpClient(); mClient.setTimeout(TIME_OUT);//设置请求超时时间 } return mClient; }}
/** * 处理服务器响应的handler,供其他的handler继承并重写onSuccess和onFailure方法 * 根据本应用改良的ResponseHandler * @since 2014-4-14 13:24:42 * @param <T> */public abstract class SimpleResponseHandler<T> extends AsyncHttpResponseHandler { protected final Context mContext; private final Type mType; /** * @param context * @param type * 请到{@link TypeReferenceFactory}中取对应的{@link Type} */ public SimpleResponseHandler(Context context, Type type) { mContext = context; mType = type; } @Override public void onSuccess(int statusCode, String result) { BasicResponse<T> response = null; try { response = JSON.parseObject(result, mType);//使用fastjson解析返回数据 if (response == null) throw new Exception(); } catch (Exception e) { e.printStackTrace(); onFailure(statusCode, R.string.net_get_data_failed, result); return; } if (!response.getSuccess()) { String msg = response.getMsg(); onFailure( msg == null ? mContext.getResources().getString( R.string.net_action_failed) : msg, response); return; } onSuccess(response); } @Override public void onFailure(int statusCode, int msgResource, String result) { onFailure(mContext.getResources().getString(msgResource), null); }//响应成功的回调函数 public abstract void onSuccess(BasicResponse<T> result);//响应失败的回调函数 public abstract void onFailure(String msg, BasicResponse<T> result);}
这里是请求的传参方法。将参数put进去,这样就能将参数发送给服务器.
public static RequestParams getNewsParams(Context context, String id, int page) { RequestParams params = new RequestParams(); params.put("id", id); params.put("page", String.valueOf(page)); Log.i("request-params", params.toString()); return params; }
这里是请求的响应返回数据并处理数据的模块
private class GetNewsResponseHandler extends SimpleResponseHandler<NewsList> { public GetNewsResponseHandler(Context context) { super(context, TypeReferenceFactory.NEWS_LIST); } @Override public void onSuccess(BasicResponse<NewsList> result) { if (result.getResult() != null) mNewsListList.addAll(result.getResult()); mNewsListListAdapter.notifyDataSetChanged(); } @Override public void onFailure(String msg,BasicResponse<NewsList> result) { Toast.makeText(getActivity(), msg,Toast.LENGTH_SHORT).show(); }; }
这样我们就可以请求服务器了。超级简单又方便,还能传送file文件作为参数。
AsyncHttpClient.getInstance().get(HttpPathConfig.GET_NEWS,RequestParamsFactory.getNewsParams(this, id, Page), new GetNewsResponseHandler(this));
参考http://www.2cto.com/kf/201408/326552.html
- Android针对http请求的第三方开源框架AsynHttpClient
- Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)
- Android基于http的网络请求async-http框架
- android Volley框架 http请求
- Android网络框架之Http请求的分发与执行
- Android异步HTTP请求框架Volley的使用
- Android网络框架xUtils的Http网络数据请求操作
- android 设计一个简易的Http网络请求框架
- Android基于http封装的网络请求框架
- android http请求 史上安卓功能最全的http请求框架(带缓存)
- Http请求之android-async-http 异步框架请求
- Android网络请求框架android-async-http
- ---Filter(二)针对http请求的Filter
- Android中Http网络请求库Asnyc-http的使用第三方库
- Android Http请求框架二:xUtils 框架网络请求
- Android Http请求框架二:xUtils 框架网络请求
- android--http请求及缓存框架GalHttprequest
- Android http网络请求框架搭建
- 对称加密,非对称加密,签名
- C++ 字符串复制函数substr
- HDU ACM 1071 The area 定积分计算
- 三招美化简历上的职业空白期
- EPEL安装源
- Android针对http请求的第三方开源框架AsynHttpClient
- 前端性能优化之js,css调用优化
- 黑马程序员——Java中对象初始化的顺序与原理 总结
- poj 3279 Fliptile 再关灯
- java io 详解
- DDMS 中不出现Genymotion模拟器
- Android应用测试总结
- IOS开发之AVPlayer(可定制播放器)
- USB无线网卡应用