Android 之AsyncHttpClient
16lz
2021-01-23
在Android开发中,与服务器通讯主要是基于Http协议来进行的.Android自己为我们提供了URLHttpConnection类来处理网络访问的问题,但是这个类的确不是很好用.今天简绍一个在Android开发中被使用的非常广泛的一个专门针对Android 的网络编程这一块的一个框架.Android-async-http.
项目的官方网站: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
public class TwitterRestClient {
private static final String BASE_URL = "http://api.twitter.com/1/";
private static AsyncHttpClient client = new AsyncHttpClient();
public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.get(getAbsoluteUrl(url), params, responseHandler);
}
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.post(getAbsoluteUrl(url), params, responseHandler);
}
private static String getAbsoluteUrl(String relativeUrl) {
return BASE_URL + relativeUrl;
}
} 总结:
Android-Async-Http的使用非常简单,通过AsyncHttpClient发起请求就可以了,如果需要添加参数,直接传一个RequestParams过去,而且参数可以是String、File和InputStream,可以很方便地上传文件。
每个请求都需要传一个ResponseHandlerInterface的实例用以接收请求结果或请求失败,请求结束等通知,一般是AsyncHttpResponseHandler的子类。
通过BinaryHttpResponseHandler可以发起二进制请求,如请求图片。
通过TextHttpResponseHandler可以发起返回结果为字符串的请求,一般这个使用较多。
更多相关文章
- android UI线程向子线程发送Message
- Android的子线程能更新UI吗?
- android 线程大集合
- Android开发艺术探索—— 第十一章Android的线程和线程池
- 无废话Android之smartimageview使用、android多线程下载、显式意
- android,handler实现两个线程通信