android-async-http是封装了HttpClient的顶层实现,它所发起的Request全部运行于不同于UI线程的其它线程中,但它回调的处理逻辑和使用Handler发送message处理的回调逻辑一样,你也可以将它运行在Service线程或者background线程中。
特点:
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(){...});
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);
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网络编程部分的同学有所帮助。
在使用中,我们需要根据自己的需求和各个框架的特点选择自己所需的框架,初期我们掌握基本的使用就可以了,很多时候我们应该去试着研究它们的源码,这样才能在以后的开发中运用自如。
其实几篇文章下来,我们可以发现开发中使用第三方框架基本上无非以下几步: