自定义 封装 volley
来源:互联网 发布:虚拟centos7网络配置 编辑:程序博客网 时间:2024/06/05 11:59
volley用的很多哈,封装了一下,直接上代码:
首先是volleyControler 全局管理volley的网络请求。
public class VolleyController { // 创建一个TAG,方便调试或Log private static final String TAG = "VolleyController"; // 创建一个全局的请求队列 private RequestQueue reqQueue; private ImageLoader imageLoader; // 创建一个static ApplicationController对象,便于全局访问 private static VolleyController mInstance; private Context mContext; private VolleyController(Context context) { mContext=context; } /** * 以下为需要我们自己封装的添加请求取消请求等方法 */ // 用于返回一个VolleyController单例 public static VolleyController getInstance(Context context) { if (mInstance == null) { synchronized(VolleyController.class) { if (mInstance == null) { mInstance = new VolleyController(context); } } } return mInstance; } // 用于返回全局RequestQueue对象,如果为空则创建它 public RequestQueue getRequestQueue() { if (reqQueue == null){ synchronized(VolleyController.class) { if (reqQueue == null){ reqQueue = Volley.newRequestQueue(mContext); } } } return reqQueue; } private ImageLoader getImageLoader(){ getRequestQueue(); //如果imageLoader为空则创建它,第二个参数代表处理图像缓存的类 if(imageLoader==null){ synchronized(VolleyController.class) { imageLoader=new ImageLoader(reqQueue, new BitmapCache()); } } return imageLoader; } public void getImage(ImageView imageView, String url, int onloadImageId, int faildImageId, int maxWidth, int maxHeight){ ImageLoader.ImageListener listener=ImageLoader.getImageListener(imageView,onloadImageId,faildImageId); getImageLoader().get(url,listener,maxWidth,maxHeight); } /** * 将Request对象添加进RequestQueue,由于Request有*StringRequest,JsonObjectResquest... * 等多种类型,所以需要用到*泛型。同时可将*tag作为可选参数以便标示出每一个不同请求 */ public <T> void addToRequestQueue(Request<T> req, String tag) { // 如果tag为空的话,就是用默认TAG req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); getRequestQueue().add(req); } public <T> void addToRequestQueue(Request<T> req) { req.setTag(TAG); getRequestQueue().add(req); } // 通过各Request对象的Tag属性取消请求 public void cancelPendingRequests(Object tag) { if (reqQueue != null) { reqQueue.cancelAll(tag); } }}
所需要的类:
public class GsonRequest<T> extends Request<T> { private final Response.Listener<T> mListener; private Gson mGson; private Class<T> mClass; public GsonRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); mGson = new Gson(); mClass = clazz; mListener = listener; } public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { this(Method.GET, url, clazz, listener, errorListener); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(mGson.fromJson(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(T response) { mListener.onResponse(response); }}
public class BitmapCache implements ImageLoader.ImageCache { private LruCache<String, Bitmap> mCache; public BitmapCache() { int maxSize = 10 * 1024 * 1024; mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); }}
使用方式:
public void getLiveData(String url, final Context context, final CallBack<myPlayList> callback, final CallBack callback2) { GsonRequest<myPlayList> gsonRequest = new GsonRequest<myPlayList>( url, myPlayList.class, new Response.Listener<myPlayList>() { @Override public void onResponse(myPlayList myResponse) { callback.callBack(myResponse); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { callback2.callBack(null); } }); VolleyController.getInstance(context).addToRequestQueue(gsonRequest); }
阅读全文
0 0
- 自定义 封装 volley
- 自定义封装Volley的请求集合
- Volley封装
- 自定义volley
- 自定义Volley
- Volley的二次封装
- volley二次封装
- Volley封装--volleyutils
- Volley框架二次封装
- Android Volley二次封装
- Volley简单封装--笔记
- volley二次封装
- volley的封装使用
- Volley的二次封装
- Volley框架封装
- Volley请求封装
- Volley请求封装
- 封装volley网络框架
- thinkphp框架操作mongo
- ios中UIButton的使用
- 教你上传本地代码到github
- 综合业务分析高并发及解决方案
- json与jsonp跨域(一)
- 自定义 封装 volley
- oracle表被锁了怎么处理
- Java设置session超时(失效)的三种方式
- android NDK的安装与配置(ubuntu)
- Perl的system后使用单引号和双引号以及其中包含变量的区别
- HDU 4888 Redraw Beautiful Drawings 最大流(唯一性)
- php在一个页面中使用另一个页面中的信息
- 【SpringMVC】视图和解析器
- 基于2-channel network的图片相似度判别