Volley是在Google I/O 2013发布的一款网络请求框架,主要用于小数据量的网络请求,包括图片的异步加载和缓存功能。在开发中可以很好的帮助开发者进行网络操作,并且更加高效。
Volley的英文意为“齐射”,在发布Volley时Goole的配图就是一副射箭的图,可以看出来,齐射的箭支并不太多,这说明,它特别适合数据量不是太大的网络请求。在手机端一般没有太大的请求量,所以Volley特别适合Android开发使用。
Volley擅长于通过RPC(Remote Procedure Call Protocol)类型的操作来填充UI,例如抓取页面的搜索数据作为结构数据,它可以与任何协议结合,并且支持 String,JSON,图片,Volley内置模板代码,这样你就可以专心处理app的逻辑。
Volley不适合大数量的下载或者流操作,因为Volley一直持有着所有的连接。对于大型下载操作,建议使用DownloadManager,或者别的框架,例如OKHttp等。
Volley的源码在AOSP仓库中,具体位置在frameworks/volley
下,里面包含主要的请求调度管道,在toolbox
包下也有一套常用的实用工具。将Volley集成到你的项目里,最简单的方式是用Git把源码clone下来,把源码设置成依赖库。
1.使用下面的Git命令从仓库中clone代码
git clone https://android.googlesource.com/platform/frameworks/volley
2.将下载的源码作为一个module导入到你的项目中,也可以打成一个jar包
在使用git clone Volley 源码的时候,会遇到以下情况
$ git clone https://android.googlesource.com/platform/frameworks/volley
Cloning into 'volley'...
fatal: unable to access 'https://android.googlesource.com/platform/frameworks/volley/': Failed to connect to android.googlesource.com port 443: Timed out
没错你猜的没错,就是被墙了,就算用了软件,开启全局模式也无济于事;当然也不是没有办法,可以设置一下 git 代理,命令如下:
$ git config --global http.proxy "localhost:1080"
运行之后,马上试试,看是不是像下面一样OK
$ git clone https://android.googlesource.com/platform/frameworks/volley
Cloning into 'volley'...
remote: Counting objects: 135, done
remote: Finding sources: 100% (135/135)
remote: Total 3193 (delta 302), reused 3193 (delta 302)
Receiving objects: 100% (3193/3193), 1.22 MiB | 39.00 KiB/s, done.
Resolving deltas: 100% (302/302), done.
Checking connectivity... done.
但是,设置完毕代理之后,最好恢复一下,否则可能影响Git的使用
git config --global --unset http.proxy
###Volley 的简单使用
我们在使用Volley时,首先会创建一个RequestQueue
,然后会传递一个Request
对象给它;RequestQueue
用来管理网络操作线程,读取和写入缓存,解析返回数据。请求对象解析完返回数据后,Volley会将解析的返回结果交给主线程。下图是一个请求的生命周期:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJeLMT4y-1588063393856)(http://developer.android.com/images/training/volley-request.png)]
该示例使用的是Android Studio 1.5.1
一. 将Volley导入项目中,有两种方式
1. File->New->Import->选择Volley->Finish;
2. 将Volley拷贝到你的项目的同级目录下,修改setting.gradle,在第一行的末尾添加括号中的内容 (,':volley'),然后点击右上角的`Sync Now`,然后稍等一会等Build完毕就OK了。
3. 当build成功之后,Volley文件夹右下角会有一个类似书架图像。
4. 打开你项目的`build.gradle`文件在 `dependencies`下面添加括号中的内容 (compile project(':volley')),然后点击右上角的`Sync Now`,等待build完毕就Ok了。
5. 或者右击不得项目根目录->Open Model Setting->在弹出的窗口的右上侧点击 Dependencies ->点击右侧绿色的加号->Module Dependency->选择Volley -> OK
二. 在AndroidManifest.xml的manifest节点下添加网络请求的权限
三. Volley 提供了一个方便的方法Volley.newRequestQueue
来获取一个RequestQueue
对象。使用默认的设置来开始请求队列。
public class VolleyStringRequestActivity extends AppCompatActivity {
public static final String mUrlStr = "https://www.baidu.com/";
TextView mTextView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley_string_request);
mTextView = (TextView) findViewById(R.id.textView);
requestUseVolley();
}
private void requestUseVolley() {
//1.获取一个RequestQueue
RequestQueue queue = Volley.newRequestQueue(this);
//2.创建一个请求,其返回的结果以String 形式返回
StringRequest stringRequest = new StringRequest(Request.Method.GET, mUrlStr, new Response.Listener() {
@Override
public void onResponse(String response) {//请求成功返回的回调
//将返回的数据显示到TextView上
mTextView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {//请求失败返回的回调
mTextView.setText(error.getMessage());
}
});
//3.将请求添加的请求队列中,在这里请求就已经开始了
queue.add(stringRequest);
}
}
除了返回String的请求,相应的还有JsonObjectRequest、JsonArrayRequst和ImageRequst,用来返回JSONObject、JSONArray和Bitmap ;用法跟StringRequst 类似。这里就不赘述了,下节再具体讨论。
上面的例子还是有些问题的,在下一节会继续讲解