您的位置:首页 > 移动开发 > Android开发

Android 网络请求框架(二) Volley工具类的封装

2020-07-18 04:21 1021 查看

上一篇给大家讲解了Volley的使用,因为重复代码比较多,这篇给大家简单的吧Volley封装一下.方便以后使用

创建VolleyRequestUtil工具类

实现单利模式,保证实例唯一化:

public class VolleyRequestUtil {

private VolleyRequestUtil(){}

private static volatile  VolleyRequestUtil mVolleyRequestUtil;

private static Context mContext;

private  RequestQueue requestQueue;
public static VolleyRequestUtil getInstance(Context context){
if (mVolleyRequestUtil == null) {
synchronized (VolleyRequestUtil.class){
if (mVolleyRequestUtil == null) {
mContext = context;

mVolleyRequestUtil = new VolleyRequestUtil();
}
}
}
return mVolleyRequestUtil;
}
........
}

StringRequest封装

/**
*
* @param url   用于请求文本接口
* @param volleyStringInterface 用于实现请求接口
*/
public void StringRequest(String url, VolleyStringInterface volleyStringInterface){
getVolley();
StringRequest stringRequest = new StringRequest(url, volleyStringInterface.onStringResponse(), volleyStringInterface.onErr());
requestQueue.add(stringRequest);
}

VolleyStringInterface接口

/**
* 文本实现接口
*/
public interface VolleyStringInterface{
public Response.Listener<String> onStringResponse();

public Response.ErrorListener onErr();
}

getVolley()方法

//获取RequestQueue对象
private void getVolley(){
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(mContext);
}
}

使用:

//参数一:文本接口
//参数二:VolleyStringInterface接口实例
VolleyRequestUtil.getInstance(this).StringRequest(STRINGREQUEST_URL, new VolleyRequestUtil.VolleyStringInterface() {
@Override
public Response.Listener<String> onStringResponse() {
//这里返回值是什么就new什么
return new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("VolleyStringRequest",response);
}
};
}
@Override
public Response.ErrorListener onErr() {
//  //这里返回值是什么就new什么
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("VolleyStringRequest",error.getMessage());
}
};
}
});

注释都有所讲解,请详细阅读注释:

来看看Log吧:

JsonObjectRequest GET封装

/**
*
* @param url   请求GET接口
* @param volleyListenerInterface
*/
public void GETJsonObjectRequest(String url, VolleyListenerInterface volleyListenerInterface){

getVolley();

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url,
null,volleyListenerInterface.onResponse(),volleyListenerInterface.onErr());

requestQueue.add(jsonObjectRequest);
}

VolleyListenerInterface接口:

/**
* JsonObject实现接口
*/
public interface VolleyListenerInterface {
/**
*
* @return  返回JSONObject接口对象
*/
public abstract Response.Listener<JSONObject>  onResponse();

/**
*
* @return 报错提示
*/
public abstract Response.ErrorListener  onErr();
}

使用:

VolleyRequestUtil.getInstance(this).GETJsonObjectRequest("http://www.weather.com.cn/data/city3jdata/china.html", new VolleyRequestUtil.VolleyListenerInterface() {
@Override
public Response.Listener<JSONObject> onResponse() {
//这里需要什么就new什么
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("onResponse", response.toString());
}
};
}

@Override
public Response.ErrorListener onErr() {
//这里需要什么就new什么
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("onErrorResponse", error.getMessage());
}
};
}
});

来康康效果吧:

JsonObjectRequest POST封装

/**
*
* @param url   请求POST接口
* @param hashMap   请求POST参数
* @param volleyListenerInterface
*/
public void POSTJsonObjectRequest(String url, final HashMap hashMap, VolleyListenerInterface volleyListenerInterface){
getVolley();
JSONObject jsonObject = new JSONObject(hashMap);

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,url,
jsonObject,volleyListenerInterface.onResponse(),volleyListenerInterface.onErr()){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
hashMap.put("Accept", "application/json");
hashMap.put("Content-Type", "application/json; charset=UTF-8");
return hashMap;
}
};
requestQueue.add(jsonObjectRequest);
}

VolleyListenerInterface接口:

 /**
* JsonObject实现接口
*/
public interface VolleyListenerInterface {
/**
*
* @return  返回JSONObject接口对象
*/
public abstract Response.Listener<JSONObject>  onResponse();

/**
*
* @return 报错提示
*/
public abstract Response.ErrorListener  onErr();
}

使用:

HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("app_key","74D2E724FE2B69EF7EA3F38E9400CF71");
VolleyRequestUtil.getInstance(this).POSTJsonObjectRequest("POST接口", hashMap, new VolleyRequestUtil.VolleyListenerInterface() {
@Override
public Response.Listener<JSONObject> onResponse() {
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {

}
};
}

@Override
public Response.ErrorListener onErr() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
};
}
});

ImageRequest封装

/**
*
* @param url   请求图片接口
* @param maxWidth  解码此位图的最大宽度,或0表示无                                参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,
*                                                                                  则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩
* @param maxHeigth 解码此位图的最大高度,或为零表示无
* @param rgb   设置颜色属性  Bitmap.Config.ARGB_8888 属性最好
* @param volleyImageInterface 图片正确错误接口
*/
public void ImageRequest(String url, int maxWidth, int maxHeigth, Bitmap.Config rgb, VolleyImageInterface volleyImageInterface){
getVolley();
ImageRequest imageRequest = new ImageRequest(
url,
volleyImageInterface.onBitmap(),
maxWidth,
maxHeigth,
rgb,
volleyImageInterface.onErr()
);
requestQueue.add(imageRequest);
}

VolleyImageInterface 实现接口:

/**
*  Bitmap实现接口
*/
public interface VolleyImageInterface {
/**
*
* @return  返回Bitmap图片
*/
public abstract  Response.Listener<Bitmap> onBitmap();

/**
*
* @return  报错
*/
public abstract Response.ErrorListener onErr();
}

使用:

VolleyRequestUtil.getInstance(this).ImageRequest("http://api.map.baidu.com/images/weather/day/zhenyu.png", 0, 0, Bitmap.Config.ARGB_8888, new VolleyRequestUtil.VolleyImageInterface() {
@Override
public Response.Listener<Bitmap> onBitmap() {
return new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
mImage.setImageBitmap(response);
}
};
}
@Override
public Response.ErrorListener onErr() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("onErrorResponse", error.getMessage());
}
};
}
});

ImageLoader封装

/**
*
* @param view      设置的ImageView
* @param uri       加载图片的路径
* @param defaultImageResId   未加载出图片时的图片
* @param errorImageResId       加载报错时的图片
* @param maxWidth  图像的最大宽度
* @param maxHeight 图像的最大高度
* @param volleyImageLoaderLolderInterface  缓存接口
*/
public  void ImageLoader(ImageView view ,String uri, int defaultImageResId, final int errorImageResId ,int maxWidth, int maxHeight, VolleyImageLoaderLolderInterface volleyImageLoaderLolderInterface){

getVolley();

ImageLoader imageLoader = new ImageLoader(requestQueue, volleyImageLoaderLolderInterface.onCache());

ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);

imageLoader.get(uri, imageListener,maxWidth,maxHeight);

}

/**
*
* @param view      设置的ImageView
* @param uri       加载图片的路径
* @param defaultImageResId   未加载出图片时的图片
* @param errorImageResId       加载报错时的图片
* @param volleyImageLoaderLolderInterface  缓存接口
*/
public  void ImageLoader(ImageView view ,String uri, int defaultImageResId, final int errorImageResId  ,VolleyImageLoaderLolderInterface volleyImageLoaderLolderInterface){

getVolley();

ImageLoader imageLoader = new ImageLoader(requestQueue, volleyImageLoaderLolderInterface.onCache());

ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);

imageLoader.get(uri, imageListener);

}

VolleyImageLoaderLolderInterface接口:

/**
*  ImageLolder实现可缓存图片接口
*/
public interface VolleyImageLoaderLolderInterface {

/**
*
* @return 缓存
* ImageLoader.ImageCache 返回2个参数   getBitmap(String url)    参数一:返回当前请求的接口
*                                      putBitmap(String url, Bitmap bitmap)    参数一:返回当前请求的接口,参数二:返回当前Bitmap对象
*                                      主要用来进行缓存
*/
public abstract ImageLoader.ImageCache onCache();
}

使用:

VolleyRequestUtil.getInstance(this).ImageLoader(image2,
"http://api.map.baidu.com/images/weather/night/duoyun.png",
R.drawable.ic_launcher_foreground,
R.drawable.ic_launcher_background,
new VolleyRequestUtil.VolleyImageLoaderLolderInterface() {
@Override
public ImageLoader.ImageCache onCache() {
return new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return null;
}

@Override
public void putBitmap(String url, Bitmap bitmap) {

}
};
}
}
);

完整代码:

package demo.ht.com.volley.http;

import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

/**
* Created by szj 20200714
*  implementation 'com.android.volley:volley:1.1.1'
*/

public class VolleyRequestUtil {

private VolleyRequestUtil(){}

private static volatile  VolleyRequestUtil mVolleyRequestUtil;

private static Context mContext;

private  RequestQueue requestQueue;
public static VolleyRequestUtil getInstance(Context context){
if (mVolleyRequestUtil == null) {
synchronized (VolleyRequestUtil.class){
if (mVolleyRequestUtil == null) {
mContext = context;

mVolleyRequestUtil = new VolleyRequestUtil();
}
}
}
return mVolleyRequestUtil;
}

/**
*
* @param url   请求GET接口
* @param volleyListenerInterface
*/
public void GETJsonObjectRequest(String url, VolleyListenerInterface volleyListenerInterface){

getVolley();

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url,
null,volleyListenerInterface.onResponse(),volleyListenerInterface.onErr());

requestQueue.add(jsonObjectRequest);
}

/**
*
* @param url   用于请求文本接口
* @param volleyStringInterface 用于实现请求接口
*/
public void StringRequest(String url, VolleyStringInterface volleyStringInterface){
getVolley();
StringRequest stringRequest = new StringRequest(url, volleyStringInterface.onStringResponse(), volleyStringInterface.onErr());
requestQueue.add(stringRequest);
}

/**
*  获取RequestQueue对象
*/
private void getVolley(){
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(mContext);
}
}

/**
*
* @param url   请求POST接口
* @param hashMap   请求POST参数
* @param volleyListenerInterface
*/
public void POSTJsonObjectRequest(String url, final HashMap hashMap, VolleyListenerInterface volleyListenerInterface){
getVolley();
JSONObject jsonObject = new JSONObject(hashMap);

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,url,
jsonObject,volleyListenerInterface.onResponse(),volleyListenerInterface.onErr()){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
hashMap.put("Accept", "application/json");
hashMap.put("Content-Type", "application/json; charset=UTF-8");
return hashMap;
}
};
requestQueue.add(jsonObjectRequest);
}

/**
*
* @param url   请求图片接口
* @param maxWidth  解码此位图的最大宽度,或0表示无                                参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,
*                                                                                  则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩
* @param maxHeigth 解码此位图的最大高度,或为零表示无
* @param rgb   设置颜色属性  Bitmap.Config.ARGB_8888 属性最好
* @param volleyImageInterface 图片正确错误接口
*/
public void ImageRequest(String url, int maxWidth, int maxHeigth, Bitmap.Config rgb, VolleyImageInterface volleyImageInterface){
getVolley();
ImageRequest imageRequest = new ImageRequest(
url,
volleyImageInterface.onBitmap(),
maxWidth,
maxHeigth,
rgb,
volleyImageInterface.onErr()
);
requestQueue.add(imageRequest);
}

/**
*
* @param view      设置的ImageView
* @param uri       加载图片的路径
* @param defaultImageResId   未加载出图片时的图片
* @param errorImageResId       加载报错时的图片
* @param maxWidth  图像的最大宽度
* @param maxHeight 图像的最大高度
* @param volleyImageLoaderLolderInterface  缓存接口
*/
public  void ImageLoader(ImageView view ,String uri, int defaultImageResId, final int errorImageResId ,int maxWidth, int maxHeight, VolleyImageLoaderLolderInterface volleyImageLoaderLolderInterface){

getVolley();

ImageLoader imageLoader = new ImageLoader(requestQueue, volleyImageLoaderLolderInterface.onCache());

ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);

imageLoader.get(uri, imageListener,maxWidth,maxHeight);

}

/**
*
* @param view      设置的ImageView
* @param uri       加载图片的路径
* @param defaultImageResId   未加载出图片时的图片
* @param errorImageResId       加载报错时的图片
* @param volleyImageLoaderLolderInterface  缓存接口
*/
public  void ImageLoader(ImageView view ,String uri, int defaultImageResId, final int errorImageResId  ,VolleyImageLoaderLolderInterface volleyImageLoaderLolderInterface){

getVolley();

ImageLoader imageLoader = new ImageLoader(requestQueue, volleyImageLoaderLolderInterface.onCache());

ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);

imageLoader.get(uri, imageListener);

}

/**
*  Bitmap实现接口
*/
public interface VolleyImageInterface {
/**
*
* @return  返回Bitmap图片
*/
public abstract  Response.Listener<Bitmap> onBitmap();

/**
*
* @return  报错
*/
public abstract Response.ErrorListener onErr();
}
/**
*  ImageLolder实现可缓存图片接口
*/
public interface VolleyImageLoaderLolderInterface {

/**
*
* @return 缓存
* ImageLoader.ImageCache 返回2个参数   getBitmap(String url)    参数一:返回当前请求的接口
*                                      putBitmap(String url, Bitmap bitmap)    参数一:返回当前请求的接口,参数二:返回当前Bitmap对象
*                                      主要用来进行缓存
*/
public abstract ImageLoader.ImageCache onCache();
}
/**
* JsonObject实现接口
*/
public interface VolleyListenerInterface {
/**
*
* @return  返回JSONObject接口对象
*/
public abstract Response.Listener<JSONObject>  onResponse();

/**
*
* @return 报错提示
*/
public abstract Response.ErrorListener  onErr();
}
/**
* 文本实现接口
*/
public interface VolleyStringInterface{
public Response.Listener<String> onStringResponse();

public Response.ErrorListener onErr();
}

}

封装的可能没有个别大佬完善,但我已经尽力了,要有更高见解,请在评论区留言哦~~

Git链接: langyangyang.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: