前段时间在项目中要使用网络通信手段,在网上搜索了一下,选择了Volley框架,结合郭神的博客写了一篇自己的博客,总结一下使用Volley的心得。
2013年Google I/O大会上发布一个新的Android网络通讯框架Volley,Volley极大地简化了网络通信的步骤,它设计的目标是用于进行数据量不大但是通信频繁的网络操作,不适用于大数据量的网络通讯(比如下载文件)。
compile ‘com.mcxiaoke.volley:library:1.0.19’
还需要添加权限:
Volley有多种请求方法,但是所有的请求方法都需要首先实现一个RequestQueue对象,可以调用如下方法获得:
RequestQueue mRequestQueue = Volley.newRequestQueue(context);
该对象可以缓存所有的HTTP请求,是一个请求队列对象,按照一定的算法并发的送请求.
1.StringRequest的用法:
创建一个StringRequest对象,用于发出一条HTTP请求,方法如下:
StringRequest stringRequest = 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);
}
});
此处new出一个StringRequest对象,需要传入三个参数,第一个参数是目标服务器的url地址(比如”www.asdas.com”),第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调,我们可以在回调里通过Log打印出响应的信息。
最后还需要将这个StringRequest对象添加到RequestQueue对象中:
mRequestQueue.add(stringRequest);
HTTP的请求通常有两种:POST和GET 刚才介绍的传入三种参数额的方法,默认的就是用GET方法,使用POST方法需要再传入一个参数:
StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener);
看过了StringRequest请求的方法,那么该如何向服务器提交我们想要上传的数据呢?这就要通过在StringRequest方法的匿名类中重写 getParams()方法,从而设置了POST的参数:
StringRequest stringRequest = 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("params1", "value1");
map.put("params2", "value2");
return map;
}
};
通过Map集合,使用键值对的方式设置你需要上传的参数,当然还有其他方法可以使用,请读者自行研究。
注意:不同的Request类型,设置POST参数的方法不尽相同,比如在JsonRequest方法中就不能使用上述方法,而需要构造一个Json对象来上传值。
2.JsonRequest的用法:
JsonRequest本身是一个抽象类,无法实现,但是可以实现它的两个子类:JsonObjectRequest和JsonArrayRequest,前者用于请求Json对象,后者用于请求Json数组。具体使用方法与StringRequest类似,但是要注意参数的个数。如下:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
传入四个参数的方法默认使用GET方法,四个参数中有三个参数与StringRequest相同,需要注意的是第二个参数,这个参数在JsonObjectRequest方法中可以传入一个Json对象,该对象包含你所要提交到服务器中的数据,另外该参数也可以为null,表示没有要提交的数据。
若要使用POST方法,示例如下:
JsonObjectRequest JsonObjectRequest = new JsonObjectRequest(Method.POST, url, null, listener, errorListener);
同样,最后需要将JsonObjectReques对象加入RequestQueue对象中。
JsonArrayRequest大同小异,只不过第二个参数出需要传入的是一个JsonArray对象。