简介:
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(); } }); } }
整个工程的代码压缩包如下,需要的可以下载:
Android Async-Http Demo