在Android中为我们提供了两种Http请求方式:HttpURLConnection以及HttpClient。这两者可以帮助我们了解在Android中对HTTP请求的处理。但是一般实际开发中都是使用别人封装好的第三方网络请求框架,因为网络操作涉及到异步以及多线程,自己动手实现的话很麻烦。而这些第三方框架在优化上还更好。本文介绍其中一个框架:android-async-http的使用。
android-async-http介绍
查看官方文档:android-async-http
android-async-http是基于Apache HttpClient专门用于android的异步http请求,所有的请求都在非UI线程执行。API比较全面,使用比较简单,而且在CallBack中使用了Handler消息机制,我们可以在回调方法onSuccess,onFailure等中直接对UI进行操作。
功能
- 用HttpClient代替Android提供的DefaultHttpClient;
- 兼容Android API 23以及更高;
- 发送异步http请求,在匿名的callback对象中处理response信息;
- 在非UI线程执行http请求;
- 使用线程池处理并发请求;
- RequestParams作为GET/POST参数构造器;
- 多部件文件上传,不需要引入第三方库;
- JSON数据流上传,不需要引入库;
- 能处理循环行和相对重定向;
- 对应用来说库很小,总共只有90KB;
- 使多种多样的移动连接具备良好自动智能请求重试机制;
- 支持超快速请求的自动gzip响应解码;
- BinaryHttpResponseHandler支持二进制通讯协议;
- 通过JsonHttpResponseHandler实现内置解析response成JSON格式;
- 通过FileAsyncHttpResponseHandler实现直接将response写入保存到文件中;
- 持久化的cookie存储,将cookie保存到应用程序的SharePreferences中;
- 通过BaseJsonHttpResponseHandler集成Jackson Json,Gson和其他的JSON序列化库;
- 通过SaxAsyncHttpResponseHandler支持SAX解析;
- 支持各种语言和内容编码,不是只有UTF-8;
使用步骤
在如图所示的文件中找到dependencies然后加上:
dependencies {
...
implementation 'com.loopj.android:android-async-http:1.4.9'
...
}
当然,你也可以选择从官网下载jar包,然后在工程中添加它。
然后,我们就可以使用这个框架了:
- 创建AsyncHttpClient对象
- 如果需要参数,可以创建RequestParams对象添加参数
按需要调用AsyncHttpClient的GET/POST方法,传递需要的回调接口实现。
下面给出一个简单的例子:
public void UserLogin(String username,String password){
AsyncHttpClient client=new AsyncHttpClient();<