Volley简介
Volley是2013年Google I/O大会上推出的一个新的网络通信框架,非常适合数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,Volley就不太合适了。
简单使用
不管是StringRequest、JsonRequest还是ImageRequest,都是以下三步曲:
- 创建一个RequestQueue对象
- 创建一个Request对象(StringRequest、JsonObjectRequest、ImageRequest)
- 将Request对象添加到RequestQueue里面。
StringRequest的使用
String url = "http://www.baidu.com";
// 第一步
RequestQueue requestQueue = Volley.newRequestQueue(this);
// 第二步
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String str) {
// 访问成功的监听,str是返回的数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 访问失败的监听
}
});
// 第三步
requestQueue.add(stringRequest);
JsonRequest的使用
JsonRequest有两种方式,一种是GET方式,不需要向服务器返回数据,一种是POST方式,需要向服务器返回数据。
GET方式
RequestQueue requestQueue = Volley.newRequestQueue(this);
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET,url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 访问成功的监听,jsonObject是返回的数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 访问失败的监听
}
});
requestQueue.add(jor);
POST方式
RequestQueue requestQueue = Volley.newRequestQueue(this);
// 准备要返回的JSON对象
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("user", "hello");
jsonObject.put("pwd", "123456");
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.POST,url, jsonObject, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 访问成功的监听,jsonObject是返回的数据
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 访问失败的监听
}
});
requestQueue.add(jor);
url是访问的网址
其实还有一个默认的规则,第一个参数可以不指定,如果你返回JSON对象,默认就是POST方式,如果返回的是null,默认就是GET方式。
ImageRequest的使用
RequestQueue requestQueue = Volley.newRequestQueue(this);
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
// 访问成功的监听,bitmap是返回的图片
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 访问失败的监听
}
});
requestQueue.add(imageRequest);
ImageRequest的构造函数接收6个参数,分别是:
- 图片的URL地址
- 图片请求成功的回调
- 图片的宽度
- 图片的高度
- 图片的颜色属性
- 图片请求失败的回调
图片的颜色属性:
Bitmap.Config下的几个常量都可以使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。
图片的宽度或高度:
如果指定的网络图片的宽度或高度大于指定的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。