Android-Async-Http使用记录

介绍:       

           Android-Async-Http是一个Android的开源网络请求类库。官方项目地址:http://loopj.com/android-async-http/。网络请求无非就是从服务器上获取数据,往服务器上上传数据,这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,不会阻塞主UI线程,并且通过回调方法处理请求结果。Android-Async-Http处理正常的获取内容,下载,上传,包括带cookies访问都是没有问题的,大名鼎鼎的Instagram就是用的这个类库。

使用:

        从官网下载依赖jar包,导入工程中libs文件夹下并添加到工程路径即可。

       先看一下基本用法

    

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {

    @Override
    public void onStart() {
        // called before request is started
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        // called when response HTTP status is "200 OK"
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        // called when response HTTP status is "4XX" (eg. 401, 403, 404)
    }

    @Override
    public void onRetry(int retryNo) {
        // called when request is retried
	}
});
    可以看出,所有的网络请求都是通过AsyncHttpClient实例来实现的。

    类库的目录结构如图:

 

    先看下主要的类的介绍:

  • AsyncHttpClient:异步请求客户端,类库进行网络请求的实例
  • AsyncHttpRequest:继承Runnabler,被submit至线程池执行网络请求并发送start,success等消息
  • AsyncHttpResponseHandler:处理网络请求成功 失败 开始  完成  等自定义的消息
  • BaseJsonHttpResponseHandler:继承TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型。
  • BinaryHttpResponseHandler :继承 AsyncHttpResponseHandler ,字节流返回处理 该库用于处理图片等
  • JsonHttpResponseHandler:继承TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray
  • SerializableCookie:集成 Serializable,用于序列化cookie,以便存取cookie
  • TextHttpResponseHandler:继承AsyncHttpResponseHandler,重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String

    官方建议使用一个静态的AsyncHttpClient,官方示例:

     

public class TwitterRestClient {
  private static final String BASE_URL = "http://api.twitter.com/1/";

  private static AsyncHttpClient client = new AsyncHttpClient();

  public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.get(getAbsoluteUrl(url), params, responseHandler);
  }

  public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }

  private static String getAbsoluteUrl(String relativeUrl) {
      return BASE_URL + relativeUrl;
  }
}
   在用的时候,我们可以直接通过类名调用需要的请求方法,你可以多封装一些不同的请求方法,比如参数不同的方法,下载方法,上传方法等。

  这是我自己的封装好的一些常用的方法:

public class HttpUtil {
		private static AsyncHttpClient httpclient = new AsyncHttpClient();
		static{
			httpclient.setTimeout(5000);
		}
		public static void get(String urlString,AsyncHttpResponseHandler res)    //用一个完整url获取一个string对象
	
	    {
		httpclient.get(urlString, res);
	    }
	    public static void get(String urlString,RequestParams params,AsyncHttpResponseHandler res)   //url里面带参数
	    {
	    	httpclient.get(urlString, params,res);
	    }
	    public static void get(String urlString,JsonHttpResponseHandler res)   //不带参数,获取json对象或者数组
	    {
	    	httpclient.get(urlString, res);
	    }
	    public static void get(String urlString,RequestParams params,JsonHttpResponseHandler res)   //带参数,获取json对象或者数组
	    {
	    	httpclient.get(urlString, params,res);
	    }
	    public static void get(String uString, BinaryHttpResponseHandler bHandler)   //下载数据使用,会返回byte数据
	    {
	    	httpclient.get(uString, bHandler);
	    }
	    public static void post(String uString,RequestParams params, JsonHttpResponseHandler bHandler)   //post数据使用,会返回json数据
	    {
	    	httpclient.post(uString,params,bHandler);
	    }
	    public static void post(String uString,RequestParams params,AsyncHttpResponseHandler res)  //post数据使用,返回普通的手
	    {
	    	httpclient.post(uString, params,res);
	    }
	    public static AsyncHttpClient getClient()
	    {
	        return httpclient;
	    }

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。