Volley封装

public class VolleySingle {
    private static Context mContext;
    private RequestQueue queue;//请求队列
    private static VolleySingle ourInstance =
            new VolleySingle();
    //获取单例的对象
    public static VolleySingle getInstance() {
        return ourInstance;
    }

    private VolleySingle() {
        //获取Application里面的context
        //mContext =context.getApplicationContex-t();
        mContext = MyApplication.getContext();

        queue = getQueue();//初始化我的请求队列
    }
    //提供一个方法新建请求队列
    public RequestQueue getQueue(){
        if (queue == null){
            if(MyApplication.getContext()==null){
                Log.d("Sysout","null");
            }
            queue = Volley.newRequestQueue(MyApplication.getContext());
        }
        return queue;
    }

    public  static  final String TAG = "VolleySingleton";

    //添加请求
    public  <T> void _addRequest(Request<T> request){
        request.setTag(TAG);//为我的请求添加标签,方便管理
        queue.add(request);//将请求添加到队列当中
    }

    public <T> void _addRequest(Request<T> request,
                                Object tag){
        request.setTag(tag);
        queue.add(request);

    }
    public void _addRequest(String url,
                            //这里为我的成功时候的回调加上String类型的泛型
                            Response.Listener<String> listener,
                            Response.ErrorListener errorListener){

        //创建StringRequest
        // 三个参数分别是 url接口网址
        //成功时候的回调,失败时候的回调
        StringRequest stringRequest = new StringRequest(url,
                listener,errorListener);
        //将请求加入到队列
        _addRequest(stringRequest);
    }
    public <T> void _addRequest(String url, Response.Listener<T> listener, Response.ErrorListener errorListener, Class<T> mClass){
        GsonRequest gsonRequest = new GsonRequest(Request.Method.GET, url,errorListener,listener,mClass);
        _addRequest(gsonRequest);
    }
    //这个方法是将请求移除队列
    public void removeRequest(Object tag){
        queue.cancelAll(tag);//根据不同的tag移除出队列
    }

    public static void addRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener){
        //获取单例的对象,调用添加请求的方法(这个是StringRequest的请求)
        getInstance()._addRequest(url,listener,errorListener);
    }
    public static  <T> void addRequest(String url, Response.Listener<T> listener, Response.ErrorListener errorListener, Class<T> mClass){
        //同上方法将GsonRequest请求加入单例的队列里
        getInstance()._addRequest(url, listener,errorListener,mClass);
    }

    /**
     * GsonRequest
     * @param <T>
     */
    class GsonRequest<T> extends Request<T> {
        private Response.Listener<T> mListener;
        private Gson mGson;
        private Class<T> mClass;//以后的实体类
        //构造方法中我们传入的参数第一个 请求数据类型,第二个参数,URL
        //第三个参数失败时的回调,第四个成功时候的回调,第五个就是实体类


        //构造方法
        public GsonRequest(int method, String url, Response.ErrorListener listener, Response.Listener<T> mListener, Class<T> mClass) {
            super(method, url, listener);
            this.mListener = mListener;
            this.mGson = new Gson();
            this.mClass = mClass;
        }

        //因为上面的构造方法中第一个参数就是我的请求类型,都是Get类型,所以我在写一个构造方法简化一下代码

        public GsonRequest(String url, Response.ErrorListener listener, Response.Listener mListener, Class mClass){
            this(Method.GET,url,listener,mListener,mClass);

        }


        //复写的方法 这个方法里我们添加的是网络请求,并且将我们想得到的数据进行解析.
        @Override
        protected Response<T> parseNetworkResponse(NetworkResponse response) {

            try {
                //首先要获取我们想要解析的数据
                String data = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                //这里我们返回的就是成功时候的回调.直接将数据解析,注意一下第二个参数是缓存入口,这里我们直接设置的就是HttpHeaderParser.parseCacheHeaders(response)
                return Response.success(mGson.fromJson(data,mClass),HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                //若出现异常,返回失败时候的回调
                return Response.error(new ParseError(e));
            }

        }
        //这个方法是对请求的response进行的反馈.
        @Override
        protected void deliverResponse(T response) {
            mListener.onResponse(response);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值