Volley是Google官方发布的一款用于Android的HTTP库,旨在进行网络请求时更快更简单,适用于数据量不大的请求。
优点
- 自动调度网络请求。
- 多个并发网络连接。
- 具有标准HTTP 缓存一致性的透明磁盘和内存响应缓存 。
- 支持请求优先级。
- 取消请求API。可以取消单个请求,也可以设置要取消的请求块或范围。
- 易于定制,例如,重试和退避。
- 强大的排序功能,可以使用从网络异步获取的数据轻松正确填充UI。
- 调试和跟踪工具
缺点
因为Volley在解析期间将所有数据保存在内存中,所以不适合大型下载或流式操作。
使用
创建RequestQueue
Volley通过RequestQueue进行请求,创建RequestQueue对象有两种方法
方式一:
1 | RequestQueue queue = Volley.newRequestQueue(); |
方式二:1
2RequestQueue queue = new RequestQueue();
queue.start();
进行StringRequest请求
Volley本身就已经封装好了多个Request,StringRequest就是其中一个,如果返回的数据是String类型的话,直接使用StringRequest就可以很方便地发起请求。
StringRequest的两个构造函数:
1 | public StringRequest( int method, String url, Listener<String> listener, @Nullable ErrorListener errorListener){ |
method为请求方式,Volley支持GET、POST、PUT、DELETE等,从代码中可以看出,如果不指定method的情况下,StringRequest默认使用GET进行请求
Listener回调为请求成功时返回的回调,而返回的数据直接就是String类型
1
2
3
4 > public interface Listener<T> {
> void onResponse(T response);
> }
>
ErrorListener回调为请求过程中发生异常时的回调
1
2
3
4 > public interface ErrorListener {
> void onErrorResponse(VolleyError error);
> }
>
最后使用RequestQueue.add()发起请求
GET请求
GET为默认的请求方式,因此method可以指定,也可以不指定
示例:
1 | Response.Listener<String> mResultListener = response -> { |
POST请求
进行POST请求时必须指定method为POST
示例:
1 | StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_POST, mResultListener, mErrorListener); |
POST设置Param或者Header
StringRequest并没有提供设置Param或者Heard而的方法,需要调用其父类Request的getParam()和getHeaders()来进行设置。1
2
3
4
5
6protected Map<String, String> getParams() throws AuthFailureError {
return null;
}
public Map<String, String> getHeaders() throws AuthFailureError {
return Collections.emptyMap();
}
示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_POST, mResultListener, mErrorListener) {
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("username", "123");
params.put("password", "456");
return params;
}
public Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("username", "789");
headers.put("password", "987");
return headers;
}
};
如果在GET请求中使用getParams()是没有作用的,如果需要添加参数可直接拼接在链接中
取消请求
Volley支持对指定请求进行取消
首先需要为Request设置TAG,然后才能取消该TAG对应的Request
为Request设置TAG:1
2
3
4
5private static final String TAG = "TAG";
StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_GET, mResultListener, mErrorListener);
// 为Request设置TAG
stringRequest.setTag(TAG);
mQueue.add(stringRequest);
取消对应TAG的Request1
mQueue.cancelAll(TAG);