一、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@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<String, String> map = new HashMap<String, String>();
* map.put("first_name", "James");
* map.put("last_name", "Smith");
* params.put("user", map); // url params: "user[first_name]=James&user[last_name]=Smith"
*
* Set<String> set = new HashSet<String>(); // unordered collection
* set.add("music");
* set.add("art");
* params.put("like", set); // url params: "like=music&like=art"
*
* List<String> list = new ArrayList<String>(); // Ordered collection
* list.add("Java");
* list.add("C");
* params.put("languages", list); // url params: "languages[]=Java&languages[]=C"
*
* String[] colors = { "blue", "yellow" }; // Ordered collection
* params.put("colors", colors); // url params: "colors[]=blue&colors[]=yellow"
*
* List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>
();
* Map<String, String> user1 = new HashMap<String, String>();
* user1.put("age", "30");
* user1.put("gender", "male");
* Map<String, String> user2 = new HashMap<String, String>();
* user2.put("age", "25");
* user2.put("gender", "female");
* listOfMaps.add(user1);
* listOfMaps.add(user2);
* params.put("users", listOfMaps); // url params: "users[][age]=30&users[][gender]
=male&users[][age]=25&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头方法