«

Android之Async-http

时间:2024-3-2 17:51     作者:韩俊     分类: Android


简介:

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

标签: android

热门推荐