Android 网络框架 android-async-http
转载请注明出处:明桑Android
这是Android网络框架系列的最后一篇了~~,
文章主要介绍第三方库 android-async-http的使用,之后作为Android网络框架系列的完结,对在开发中如何学习和使用第三方框架做个总结!
1,Android Asynchronous Http Client简介
android-async-http是封装了HttpClient的顶层实现,它所发起的Request全部运行于不同于UI线程的其它线程中,但它回调的处理逻辑和使用Handler发送message处理的回调逻辑一样,你也可以将它运行在Service线程或者background线程中。
特点:
- 异步HTTP请求,匿名回调响应函数
- 在其他线程而非UI线程中发送Request
- Requests使用线程池管理限制并发资源
- 可以自定义GET/POST参数
- 多种文件上传方式
- JSON数据的上传
- Request重试机制
- 解析多种数据格式
- 支持持久化存储Cookie
- 支持SAX解析
- 支持多种内容和语言编码格式,不仅仅是UTF-8
2,Android-async-http的使用
- 跟所有第三方库的使用一样,我们需要将其添加进我们的项目:可以直接下载最新.jar包( android-async-http.jar),也可以从github中将其clone到本地:android-async-http
- 如果是直接下载的.jar包,将其添加至项目
libs
文件夹下,并右键jar包,选择将其Add As Library: - 如果是clone的项目,你还是需要将其编译成jar包,然后根据第1步操作添加进项目:以下是编译过程:
首先进入你clone的android-async-http目录下,然后在命令行执行如下命令
- 如果是直接下载的.jar包,将其添加至项目
android update project -p
ant jar
2.android-async-http的基本用法:
我们首选需要创建一个AsyncHttpClient
实例,然后用它发起Request
AsyncHttpClietn client=new AsyncHttpClient();
client.get("http://www.baidu.com",new AsyncHttpResponseHandler(){
@Override
public void onStart(){
//在Request发起前调用
}
@Override
public void onSuccess(int statusCode,Header[] headers,byte[] response){
//正确响应时调用,statusCode=200,headers代表响应http头部,response:响应返回值
}
@Override
public void onFailure(int statusCode,Header[] heards,byte[] errorResponse,Throwable e){
//未正确响应时调用:statusCode=401\403\404\...
}
@Override
public void onRetry(int retryNo){
//重试请求时调用
}
});
推荐用法:创建 static Http Client;
跟Volley框架一样,我们应该单独创建一个类,将我能需要的代码初始化,以便于全局持有某些对象。在这里将我们所需要的封装在一个static Client类中,可以根据自己的需求具体编写自定义Client类,具体的使用参考API: AsyncHttpClient, RequestParams and AsyncHttpResponseHandler
public class MyCLient{
private static final String BASE_URL="http://www.baidu.com";
//创建一个static client
private static AsyncHttpClient client=new AsyncHttpClient();
//重写我们所需要的get,post等方法
public static get(String url,RequestParams params,AsyncHttpResonseHandler responseHand){
client.get(url,params,respnseHand)
}
public static post(String url,RequestParams params,aAsyncHttpResponseHandler responseHand){
client.post(url,params,responseHand);
}
}
//然后在需要的地方调用即可,
MyClient.get(url,params,new AsyncHttpResonseHandler(){...});
3.Cookie的存储:通过使用PersistentCookieStore,它实现了HttpClient中CookieStore接口,自动将Cookie存储到本地SharedPerferences中,常用来存储用户登录信息等。
AsyncHttpClient client=new AsyncHttpClient();
PersistentCookieStore cookieStore=new PersistentCookieStore(context);
client.setCookieStore(cookieStore);
//当然你也可以自己将Cookie添加存储到本地,先创建Cookie对象,然后通过addCookie()添加
BasicClientCookie myCookie=new BasicClientCOokie("cookieuser","hh");
myCookie.setViersion(1);
myCookie.setDomain("www.my.com");
myCookie.setPath("/");
client.addCookie(myCookie);
4.为Request添加GET/POST参数:需要用到RequestParams类,
创建方法有以下几种:
RequestParams params=new RequestParams("username","coder");
//或者
RequestParams params=new RequestParams();
params.put("username","coder");
//也可以通过键值对Map对象添加
HashMap<String,String> map=new HashMap<String,String>();
map.put("username","coder");
RequestParams params=new RequestParams(map);
....
//还记得前面写过的get(),post()方法吗,RequestParams即是它的第二个可选参数
client.get(url,params,new AsyncHttpResponseHandler(){..});
5.通过RequestParams上传文件:上面我们知道了如何试着RequestParams,那么怎么才能上传一个文件呢,可以通过以下三种方式:
通过输入流上传:
InputStream myInputStream = blah;
RequestParams params = new RequestParams();
params.put("secret_passwords", myInputStream,
“passwords.txt”);
通过文件对象上传:
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
通过字节数组上传:
byte[] myByteArray = blah;
RequestParams params = new RequestParams();
params.put("soundtrack", new ByteArrayInputStream(myByteArray), "she-wolf.mp3");
6.下载二进制文件:通过FileAsyncHttpResponseHandler类可以下载图片等二进制文件
AsyncHttpClient client=new AsyncHttpClient();
client.get("www.my.com/movies.jpg",new FileAsyncHttpResponseHandler(){
@Override
public void Success(int statusCode,Header[] headers,File response){
//获取文件
}
})
那我们如何发送其他类型的例如Json请求呢,其实观察可以发现只需要:new JsonHttpResponseHandler(){..}
7.HTTP身份验证Request:webservice中常需要进行身份验证,可通过以下两种方式实现:
AsyncHttpClient client=new AsyncHttpClient();
//
client.setBasicAuth("username","password/token");
client.get("http://www.my.com");
//也可以设置更详细的验证范围
client.setBasicAuth("username","password",new AuthScope("www.my.com",80,AuthScope.ANY_REALM));
client.get("http://www.my.com");
以上即android-async-http 框架的基本用法,不写具体的Demo了,更多内容参见官网提供的API:android-sync-http API
总结:
Android网络框架的学习就告一段落了,主要介绍了Volley、Picasso、android-sync-http三种框架的使用,希望能对正在学习Android网络编程部分的同学有所帮助。
在使用中,我们需要根据自己的需求和各个框架的特点选择自己所需的框架,初期我们掌握基本的使用就可以了,很多时候我们应该去试着研究它们的源码,这样才能在以后的开发中运用自如。
其实几篇文章下来,我们可以发现开发中使用第三方框架基本上无非以下几步:
- 根据自己的需求去
github
等网站寻求目前比较流行的框架; - 熟悉你所选定框架的特点和使用场景以及缺陷。
- 将对应jar包引入项目。
- 根据官方示例掌握基本用法。
- 多做练习,熟悉使用场景。
- 研究源码,改写框架以适应自己的需求。
接下来准备写篇实战的文章,灵活运用以上所学框架我们实现一个简单APP,有兴趣的关注微博或公众号,随时更新~~
参考资料:
Android Asynchronous Http Client
- 微博: @明桑Android黑历史
- 邮箱: <[email protected]>
- 个人主页: 明桑战胜Android汪的黑历史
微信公众号: ITBird
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。