AsyncHttpClient

一、什么是AsyncHttpClient

专门针对Android在Apache的HttpClient基础上构建的异步的callback-based http client

二、AsyncHttpClient的特点

  1. 发送异步http请求,在匿名callback对象中处理response;
  2. http请求发生在UI线程之外;
  3. 内部采用线程池来处理并发请求;
  4. GET/POST 参数构造,通过RequestParams类
  5. 内置多部分文件上传,不需要第三方库支持;
  6. 流式Json上传,不需要额外的库;
  7. 能处理环行和相对重定向;
  8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
  9. 自动智能的请求重试机制在各种各样的移动连接环境中;
  10. 自动的gzip响应解码;
  11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
  12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
  13. 通过BaseJsonHttpResponseHandler和各种json库集成;
  14. 支持SAX解析器;
  15. 支持各种语言和content编码,不仅仅是UTF-8。

三、使用AsyncHttpClient的步骤

  1. 创建一个AsyncHttpClient;
  2. (可选的)通过RequestParams对象设置请求参数;
  3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。

四、在代码中实现android-async-http

1、在gradle添加依赖库
compile 'com.loopj.android:android-async-http:1.4.9'
2、在Activity中写入(这是最简单的一种方法)
//创建一个新AsyncHttpClient实例并发出请求
AsyncHttpClient client = new AsyncHttpClient();

//AsyncHttpClient中有get和post两种方法
//第一个参数是所要获取接口,第二个参数是所发出的请求
client.get("https://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        Toast.makeText(MainActivity.this,responseString,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        Toast.makeText(MainActivity.this,"fail",Toast.LENGTH_SHORT).show();
    }
});
3、建议方法:创建一个静态的Http客户端
01、创建类(类名自定义),写入路径,方法
public class AsyncHttp {
//定义String类型来接收接口相同的部分
   private static final String BASE_URL = "http://192.168.1.101:8890/type/jason/action/";
    private static AsyncHttpClient client = new AsyncHttpClient();
//get方法
    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), params, responseHandler);
    }
//post方法
    public static void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler) {
        client.post(context, getAbsoluteUrl(url), entity, contentType, responseHandler);
    }
////单独写一个方法添加URL不同的地方
    private static String getAbsoluteUrl(String relativeUrl) {
        return BASE_URL + relativeUrl;
    }
}
02、在Activity中获取数据
//引号中的是参数名,第二个是返回的值
AsyncHttp.get("getSensor", null, new TextHttpResponseHandler() {
 @Override
  public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
  //显示失败                      Toast.makeText(MainActivity.this,"fail",Toast.LENGTH_SHORT).show();

 @Override
 public void onSuccess(int statusCode, Header[] headers, String responseString) {
 //显示成功,弹跳出来     Toast.makeText(MainActivity.this,responseString,Toast.LENGTH_SHORT).show();
  }
 });
03、传参方法(RequestParams)
RequestParams requestParams=new RequestParams();
  requestParams.put("params","{\"classify_id\":70,\"page\":1,\"page_count\":2}");
                //params:键,第二个是值
4、AsyncHttpClient的post方法发送JSON格式参数
//定义json对象
JSONObject jsonObject=new JSONObject();
 try {
 //解析json数据
  jsonObject.put("Roadlamp",1);
    } catch (JSONException e) {
     e.printStackTrace();
   }
   ByteArrayEntity entity=null;
    try {
   entity=new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8"));
   //用application/json向其传达这是json类型的接口数据
    entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
     }
   AsyncHttp .post(MainActivity.this,"control",entity,"application/json",new JsonHttpResponseHandler(){
 @Override
 public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
    super.onSuccess(statusCode, headers, response);
   Log.e("rs",response.toString());
       }

   @Override
   public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
  super.onFailure(statusCode, headers, throwable, errorResponse);
                    }
                });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值