天天看点

Android网络请求框架:Android-async-http简单使用

Android-async-http网络框架:https://github.com/loopj/android-async-http

* 是一款高效的数据请求,文件上传下载网络请求开源框架。

* 优点:

* 网络请求回调清晰,易操作

* 请求使用线程池TreadPool,限制并发请求资源使用

* GET,POST等常用 请求基于参数构建使用,传递参数方便

* Multipart文件上传下载等。

使用比较简单,但其功能非常强大,还需要在使用中不断挖掘,简单使用举例:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //使用get请求
        http_get();
        //使用post请求
        http_post();
    }

    private void http_get() {
        // 网络请求的连接地址,xxxxxxxx指你在聚合api中申请的key值
        String url = "http://apis.juhe.cn/mobile/get?phone=13429667914&key=xxxxxxxx";
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers,  
                    byte[] result) {//网络请求成功处理
                Log.e("ldm",new String(result));
            }
        });

    }

    private void http_post() {
        //用Post要把get请求后面的字段用参数的方式过去
        String url = "http://apis.juhe.cn/mobile/get?";
        AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象  
        String url = "http://172.16.237.200:8080/video/login.do"; // 定义请求的地址  
        // 创建请求参数的封装的对象  
        RequestParams params = new RequestParams();  
        param.put("phone", "13429667914");//参数phone
        param.put("key", "xxxxxxxx");  //参数key:在聚合API网站申请的key值
        // 执行post方法  
        client.post(url, params, new AsyncHttpResponseHandler() {  
            @Override  
            public void onSuccess(int statusCode, Header[] headers,  
                    byte[] result) {  
                if (statusCode == ) {//请求成功处理
                    Log.e("ldm",new String(result));   
                }  
            }  

            @Override  
            public void onFailure(int statusCode, Header[] headers,  
                    byte[] responseBody, Throwable error) { //请求失败处理 
                 Log.e("ldm",error.printStackTrace().toString());// 把错误信息打印出轨迹来  
            }  
        });  
    }
}
           
我们可以对AsyncHttpResponseHandler进行简单封装,当然我们可以根据自己项目的需要对框架进行封装,方便项目开发。
public abstract class NetHttpHandler extends AsyncHttpResponseHandler {
    @Override
    public void onStart() {
        Log.e("ldm", "网络请求开始,我们可以使用加载框提示");
        super.onStart();
    }
    @Override
    public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
        Log.e("ldm", "请求失败,进行失败处理");
        requestFail(agr3);
        super.onFailure(arg0, arg1, arg2, arg3);
    }
    @Override
    public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
        Log.e("ldm", "请求成功,进行成功后数据处理");
        requestSuccess(new String(arg2));
        super.onSuccess(arg0, arg1, arg2);
    }
    public abstract void requestSuccess(String result);// 请求成功回调
    public abstract void requestFail(Throwable error);// 请求失败回调

}
           

我们把上面的AsyncHttpResponseHandler 换成我们的NetHttpHandler,在requestSuccess()和requestFail()方法中进行逻辑处理就可以了。

继续阅读