android-async-http源码解读(一)

一、android-async-http研究
1.框架对外接口主要类AsyncHttpClient:
1)可以被用来异步的发送GET, POST, PUT and DELETE HTTP请求(对应着多个公共方法),可以通过  
  RequestParams类辅助传递参数,可以通过实现ResponseHandlerInterface的类处理请求返回结果,具体用法简单  


到爆:创建一个AsyncHttpClient对象AsyncHttpClient client = new AsyncHttpClient();用这个对象发送请求(此


处以get方法为例)同时实现回调接口打印结果
client.get("http://www.google.com", new onseHandlerInterface() {
 Override
 public void onSuccess(String response) {
       System.out.println(response);
   }
});
2)AsyncHttpClient提供了多种初始化方法,方便使用者配置自己的端口号、Scheme等,没有特殊配置需求用默认的


单例毛事getIntance方法调用即可,在默认配置里面该类提供了:最大连接数、超时时间、请求失败重新请求的次数


、重新请求的延迟时间、默认的socket大小、头部编码格式、压缩格式gzip等等(对应着各种get、set方法)
2.传递参数类RequestParams:
1)该类支持多种格式的参数传递例如:String\File\InputStream\Bytes\Map\Set\List\String Array\Map List等


多种字符串格式,源码实例:
 * <pre>
 * RequestParams params = new RequestParams();
 * params.put("username", "james");
 * params.put("password", "123456");
 * params.put("email", "my&#064;email.com");
 * params.put("profile_picture", new File("pic.jpg")); // Upload a File
 * params.put("profile_picture2", someInputStream); // Upload an InputStream
 * params.put("profile_picture3", new ByteArrayInputStream(someBytes)); // Upload some bytes
 *
 * Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
 * map.put("first_name", "James");
 * map.put("last_name", "Smith");
 * params.put("user", map); // url params: "user[first_name]=James&amp;user[last_name]=Smith"
 *
 * Set&lt;String&gt; set = new HashSet&lt;String&gt;(); // unordered collection
 * set.add("music");
 * set.add("art");
 * params.put("like", set); // url params: "like=music&amp;like=art"
 *
 * List&lt;String&gt; list = new ArrayList&lt;String&gt;(); // Ordered collection
 * list.add("Java");
 * list.add("C");
 * params.put("languages", list); // url params: "languages[]=Java&amp;languages[]=C"
 *
 * String[] colors = { "blue", "yellow" }; // Ordered collection
 * params.put("colors", colors); // url params: "colors[]=blue&amp;colors[]=yellow"
 *
 * List&lt;Map&lt;String, String&gt;&gt; listOfMaps = new ArrayList&lt;Map&lt;String, String&gt;&gt;


();
 * Map&lt;String, String&gt; user1 = new HashMap&lt;String, String&gt;();
 * user1.put("age", "30");
 * user1.put("gender", "male");
 * Map&lt;String, String&gt; user2 = new HashMap&lt;String, String&gt;();
 * user2.put("age", "25");
 * user2.put("gender", "female");
 * listOfMaps.add(user1);
 * listOfMaps.add(user2);
 * params.put("users", listOfMaps); // url params: "users[][age]=30&amp;users[][gender]


=male&amp;users[][age]=25&amp;users[][gender]=female"
 *
 * AsyncHttpClient client = new AsyncHttpClient();
 * client.post("http://myendpoint.com", params, responseHandler);
 * </pre>
2)同时,RequestParams提供了四种构造参数,但是里面的实质都是以怎样的,都是将传递的参数转换成键值对的形


式进行处理,具体的处理都是通过put()以及他的多态形式实现,所有的参数都同意的通过下面四种局部变量进行存


储: protected ConcurrentHashMap<String, String> urlParams;
    protected ConcurrentHashMap<String, StreamWrapper> streamParams;
    protected ConcurrentHashMap<String, FileWrapper> fileParams;
    protected ConcurrentHashMap<String, Object> urlParamsWithObjects;
注意这里保存方式采用了JDK1.5支持得线程安全ConcurrentHashMap类,保证安全的同时提高了效率
3)以下几个比较常用的方法getEntity()\getParamsList()\getParamString()都是获取参数信息的方法、


setUrlParams()是可以直接设置protected ConcurrentHashMap<String, String> urlParade 的方法
3.规范针对网络请求返回处理的接口ResponseHandlerInterface:该接口是对网络处理的规范化,提供了获取网络请


求数据、网络请求开始、完成、成功、失败、重试、加载中的回调,同时提供获取请求的Uri以及header头方法

你可能感兴趣的:(源码,异步,AsyncHttpClient,RequestParams)