一. Volley 简介
Volley 是Google推出的一个网络数据访问框架,该框架能够更加简单,快速地访问网络数据。
二. Volley 使用
1. 将Volley封装单例
public class VolleyManager {
private volatile static VolleyManager mInstance;
private RequestQueue mRequestQueue;
public static VolleyManager getInstance() {
if (mInstance == null) {
synchronized (VolleyManager.class){
if (mInstance == null){
mInstance = new VolleyManager();
}
}
}
return mInstance;
}
public void initVolley(Context context) {
mRequestQueue = Volley.newRequestQueue(context);
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(DaemonApplication.getAppContext());
}
return mRequestQueue;
}
}
然后在Application 中进行初始化
VolleyManager.getInstance().initVolley(mContext);
2. String请求
String请求很简单,只要将StringRequest添加到Volley的请求队列中就可以了
String postUrl = "https://www.baidu.com/";
StringRequest stringRequest = new StringRequest(postUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
VolleyManager.getInstance().getRequestQueue().add(stringRequest);
在相应的回调方法中进行后续处理。
3. Json请求
类似与String的请求,直接创建一个JsonObjecRequest,然后添加到请求队列中就行了
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(postUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
VolleyManager.getInstance().getRequestQueue().add(jsonObjectRequest);
当然,除了JsonObjectRequest,还有Json的数组请求,JsonArrayRequest,请求方式类似。
4. 设置请求方式
Volley中支持所有的请求方式,我们常用的有POST和GET,在volley中,可以用如下的方式使用:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(postUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public int getMethod() {
return Method.POST;
}
};
VolleyManager.getInstance().getRequestQueue().add(jsonObjectRequest);
重写Request中的getMethod方法。
5.设置请求参数
请求参数的设置方式类似上述请求方式的设置方法,在request中方法getParams
@Override6.设置请求头
protected Map<String, String> getParams() throws AuthFailureError {
return super.getParams();
}
设置请求头也是类似上述设置请求参数的方法,直接重写getHeaders()
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return super.getHeaders();
}
7.图片加载
volley提供方便加载图片的方法和控件。先看Volley提供的图片加载控件:NetworkImageView,使用方法如下:
ImageLoader imageLoader = VolleyManager.getInstance().getImageLoader();
imgNetWorkView.setImageUrl(Const.URL_IMAGE, imageLoader);
是不是很方便,接下来我们看普通的加载方式
imageLoader.get(Const.URL_IMAGE, ImageLoader.getImageListener(imageView, R.drawable.ico_loading, R.drawable.ico_error));
是不是很简单。
三. Volley框架优缺点:
优点:
1. 使用简单快速
2. 扩展性强
3. 强大的缓存机制
4. 可以设置请求的优先级
5. 可以取消请求
缺点:
1.下载文件的时候,性能较差, 由于其内部的实现方式,所以我不太推荐使用Volley中的图片加载。
2. 由于图片加载和数据访问使用的是同一个网络请求实现,所以并没有设置wifi或者移动数据请求网络的处理,
可能用户在移动数据下也会去现在图片