前言
首先强烈推荐Volley的源码,Volley是 Google 官方的异步任务框架,没有随 Android 发布,需要自己在 Framework 里下载代码。Volley 的中文意思就是 “并发”,阅读其源码能让你见识到原来异步任务框架也能写得这么低耦合和高扩扩展,其用“生产者 - 消费者” 模式来处理异步请求的框架会让人拍案叫绝。此外,Volley 框架是用于处理 Http 任务和 Image 加载任务,但是其优秀的异步控制思想也能运用与 File、Sqlite 等耗时任务的处理,当你能够自己写出类似 Volley 框架的代码时,说明你的 Android 技术已经有所突破。
Android系统提供了两种方式来进行Http通信,HttpURLConnection和HttpClient,现在在Android比较新的版本中已经不包含HttpClient,如果想使用基于HttpClient的网络请求框架,需要下载依赖包。但是HttpURLConnection和HttpClient的用法是比较复杂的,尤其是post请求,需要模拟表单提交,如果不进行封装,就会写出耦合度很高的代码,于是就产生了很多网络请求框架。谷歌自己也设计了一款网络请求框架,就是我们今天要讲的Volley。Volley设计的目的就是适合数据量不大,但是网络通信比较频繁的操作。
Volley的基本用法
首先需要下载Volley的源码或者jar包,源码下载有两种一种是git,
git clone https://android.googlesource.com/platform/frameworks/volley
另一种是在github上面的地址点我Volley
1、基本的使用步骤
- 创建一个RequestQueue对象。
- 创建一个Request对象。(这个可以自定义)
- 将Request对象添加到RequestQueue里面。
下面就来看一下具体的使用方法,就拿StringRequest举例
1.1.1 StringRequest的用法
- 获取RequestQueue对象,方法如下
//传入上下文
RequestQueue mQueue = Volley.newRequestQueue(context);
这里首先介绍一下使用方法,下一篇再详细的介绍这些内容的含意。RequestQueue 是一个请求队列,它缓存了所有的HTTP请求,然后再依次发送这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。最好是在基类当中创建这个对象,这样整个App只有一个队列,节省不少内存。
- 发送HTTP请求就要传入url和请求的方式,那么Volley框架是如何得到这些信息的呢?我们来看具体的方法
String url = "http://write.blog.csdn.net/mdeditor";
StringRequest mStringRequest = new StringRequest(url ,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
我们构建了一个Request对象,传入了三个参数,第一个是URL地址,第二个是请求成功的回调,第三个是失败的回调。
- 将请求加入到队列当中
mQueue.add(stringRequest);
这样就完成Volley最基本的GET请求,运行一下就可以得到返回的HTML页面的信息。
可能有的同学会问,知道了GET请求,那么POST请求是怎么样的呢?当然谷歌工程师将这些参数都封装好了,我们只需要动动手调用就行了。
下面看具体的代码
//默认是GET请求,所以不传参数就是GET请求
StringRequest mStringRequest = new StringRequest(Method.POST, url, listener, errorListener);
虽然提供POST的请求方法,但是StringRequest中没有提供设置参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示:
StringRequest mStringRequest = new StringRequest(Method.POST, url, listener, errorListener) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("key", "value");
map.put("key", "value");
return map;
}
};
这样就可以设置参数了,由于Volley是开源的,灵活性很高,你可以自由的定制参数的设置,相信对于基础好的同学来说,这些都不是问题。
基本的请求模式都是一样的,掌握了一个其他的照葫芦画瓢就行了,这里就不再一一介绍了。Volley的基本介绍就到这里,下篇将为大家深入的剖析Volley框架。