自定义 封装 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);    }



原创粉丝点击