Android 网络请求框架(二) Volley工具类的封装
2020-07-18 04:21
1021 查看
上一篇给大家讲解了Volley的使用,因为重复代码比较多,这篇给大家简单的吧Volley封装一下.方便以后使用
- 创建VolleyRequestUtil工具类
- StringRequest封装
- JsonObjectRequest GET封装
- JsonObjectRequest POST封装
- ImageRequest封装
- ImageLoader封装
- 完整代码:
创建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.
相关文章推荐
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
- Android异步网络请求开源框架Volley
- Android 网络请求框架Volley实例详解
- Android网络请求利用第三方框架okHttp的工具类
- Android网络请求开源框架Volley快速使用指南(1)——发起Get和Post请求
- 简析Android网络请求Volley框架的工作原理
- android框架搭建——封装一个属于自己的网络工具类
- Android Volley网络请求框架 实现post方法并带Map参数上传
- Android 的OkHttp 网络请求框架的学习封装
- Android--menu和OkHttp框架(未封装),结合Executors(线程池)实现网络请求的案例
- android网络框架的封装——volley
- 根据volley网络请求框架封装好的get请求和post请求
- Android网络请求框架AsyncHttp二次封装
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比
- Android网络框架-Volley(四) 使用get和post方法发送json请求
- Android-Volley网络通信框架(自定义Request 请求:实现 GsonRequest)
- Android网络框架-Volley(四) 使用get和post方法发送json请求
- android http——网络请求二次封装的框架设计
- Android网络请求框架 Volley