Android 网络访问框架 Volley 基本使用

时间:2021-08-26 19:47:04

一. Volley 简介

        Volley 是Google推出的一个网络数据访问框架,该框架能够更加简单,快速地访问网络数据。

Android 网络访问框架 Volley 基本使用

二. 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

@Override
protected Map<String, String> getParams() throws AuthFailureError {
return super.getParams();
}
     6.设置请求头

设置请求头也是类似上述设置请求参数的方法,直接重写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或者移动数据请求网络的处理,

可能用户在移动数据下也会去现在图片