简介:
Async-http是一款国外的开源框架,作者是loopj。是基于Apache HttpClient库的。可以方便快速高效的进行网络数据请求和发送,文件下载和上传。
特点:
清晰的网络请求回调
请求使用ThreadPool,限制并发资源使用情况
GET / POST基于参数构建使用(RequestParams),方便
Multipart 文件上传,大数据上传下载
自动智能请求重试,优化了质量不一的移动连接
内置响应解析成JSON,使用JsonHttpResponseHandler
持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
二进制文件(图片等)的下载,使用BinaryHttpResponseHandler
用法:
建立请求首先建立请求客户端对象。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。
Async-http的Get和Post请求可以基于参数化请求(RequestParams),可以清晰方便的将你的请求参数放到里面,然后进行Get和Post请求。
示例:
首先我们需要选择一个网络服务API,这里我选择聚合数据里面的手机归属地查询API,1注册2申请,申请之后会为你的应用分配一个AppKey,下面是API说明:
/**
*
接口地址:http://apis.juhe.cn/mobile/get
支持格式:JSON/XML
请求方式:GET/POST
请求示例:http://apis.juhe.cn/mobile/get?phone=13429667914&key=您申请的KEY
请求参数:
名称 类型 必填 说明
phone int 是 需要查询的手机号码或手机号码前7位
key string 是 应用APPKEY(应用详细页查询)
dtype string 否 返回数据的格式,xml或json,默认json
调用样例及调试工具:
API测试工具
返回字段:
名称 类型 说明
error_code int 返回码
reason string 返回说明
result string 返回结果集
province string 省份
city string 城市
areacode string 区号
zip string 邮编
company string 运营商
card string 卡类型
*
*/
在使用Async-Http之前,必须将jar包放入工程中去,我这里写了一个示例代码,如下:
public class MainActivity extends Activity implements OnClickListener{
// Get请求方式的URL
private static final String URL_GET = "http://apis.juhe.cn/mobile/get?phone=18952201314&key=a53155cc6af64daabc66655b060db56a";
// Post请求方式的URL
private static final String URL_POST = "http://apis.juhe.cn/mobile/get?";
//声明一个AsyncHttpClient的变量
private AsyncHttpClient asyncHttpClient = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
initAsyncHttp();
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.button1:
//用Get方式提交请求
asyncHttpGet();
break;
case R.id.button2:
//用Get方式提交请求
asyncHttpPost();
break;
default:
break;
}
}
private void setupViews(){
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
//初始化asyncHttp
private void initAsyncHttp(){
asyncHttpClient = new AsyncHttpClient();
}
private void asyncHttpGet(){
//当Get请求被发送时,onStart、onSuccess或onFailure、onFinish方法将依次被回调
asyncHttpClient.get(URL_GET, new AsyncHttpResponseHandler(){
@Override
public void onStart() {
System.out.println("get request onStart...");
super.onStart();
}
@Override
public void onSuccess(String arg0) {
String result = arg0;
//如果需要将result通过Json解析封装为对象,可参考《Android之Volley》中的代码
System.out.println(result);
super.onSuccess(arg0);
}
@Override
public void onFailure(Throwable arg0) {
System.out.println("get request onFailure...");
super.onFailure(arg0);
}
@Override
public void onFinish() {
System.out.println("get request onFinish...");
super.onFinish();
}
});
}
private void asyncHttpPost(){
//新建一个RequestParams对象用来存储Post请求的参数
RequestParams requestParams = new RequestParams();
//设置请求参数
requestParams.put("phone", "18952201314");
requestParams.put("key", "a53155cc6af64daabc66655b060db56a");
//当Post请求被发送时,onStart、onSuccess或onFailure、onFinish方法将依次被回调
//因为返回的数据是json格式的,所以这里的Handler可以选择成JsonHttpResponseHandler
asyncHttpClient.post(URL_POST, requestParams, new JsonHttpResponseHandler(){
@Override
public void onStart() {
System.out.println("post request onStart...");
super.onStart();
}
@Override
public void onSuccess(JSONObject arg0) {
// 这里回调参数直接是JSONObject类型,省去了我们一道程序
System.out.println(arg0.toString());
super.onSuccess(arg0);
}
@Override
public void onFailure(Throwable arg0) {
System.out.println("post request onFailure...");
super.onFailure(arg0);
}
@Override
public void onFinish() {
System.out.println("post request onFinish...");
super.onFinish();
}
});
}
}
整个工程的代码压缩包如下,需要的可以下载: