Volley请求封装

来源:互联网 发布:社交网络的发展现状 编辑:程序博客网 时间:2024/06/17 12:40

1.封装GsonRequest

package com.inspur.handnwom.content.reportdeal.utils;import android.util.Log;import com.android.volley.NetworkResponse;import com.android.volley.ParseError;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.HttpHeaderParser;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.io.UnsupportedEncodingException;/** * <pre> *     author: wsj *     time  : 2017/06/27 20:29 *     desc  : * </pre> */public class GsonRequest<T> extends Request<T> {    private final Listener<T> mListener;    private static Gson mGson = new Gson();    private String url;    private Class<T> mClass;    private TypeToken<T> mTypeToken;    public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,                       ErrorListener errorListener) {        super(method, url, errorListener);        mClass = clazz;        this.url = url;        mListener = listener;    }    public GsonRequest(int method, String url, TypeToken<T> typeToken, Listener<T> listener,                       ErrorListener errorListener) {        super(method, url, errorListener);        this.url = url;        mTypeToken = typeToken;        mListener = listener;    }    public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) {        this(Method.GET, url, clazz, listener, errorListener);        this.url = url;    }    public GsonRequest(String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) {        super(Method.GET, url, errorListener);        this.url = url;        mTypeToken = typeToken;        mListener = listener;    }    @Override    protected Response<T> parseNetworkResponse(NetworkResponse response) {        String jsonString = "";        try {            jsonString = new String(response.data, "UTF-8");            if (mTypeToken == null)                return Response.success(mGson.fromJson(jsonString, mClass),                        HttpHeaderParser.parseCacheHeaders(response));            else                return (Response<T>) Response.success(mGson.fromJson(jsonString, mTypeToken.getType()),                        HttpHeaderParser.parseCacheHeaders(response));        } catch (UnsupportedEncodingException e) {            Log.d("service", "服务器回复数据" + jsonString);            Log.d("service", "要解析的url" + url);            Log.d("service", "要解析的class" + mClass.getName());            Log.d("service", "报错信息" + e.getMessage());            return Response.error(new ParseError(e));        }    }    @Override    protected void deliverResponse(T response) {        mListener.onResponse(response);    }}

2.封装VolleyRequest

package com.inspur.handnwom.content.reportdeal.utils;import android.content.Context;import android.util.Log;import com.android.volley.AuthFailureError;import com.android.volley.DefaultRetryPolicy;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.toolbox.Volley;import java.util.HashMap;import java.util.Map;/** * <pre> *     author: wsj *     time  : 2017/06/27 20:28 *     desc  : * </pre> */public class VolleyRequest  {    private static RequestQueue mRequestQueue;    private Map<String,String> mMap=new HashMap<>();    private String cookie="";    private VolleyRequest() {    }    private VolleyRequest(Map<String,String> mMap) {        this.mMap=mMap;    }    private VolleyRequest(Map<String,String> mMap,String cookie) {        this.mMap=mMap;        this.cookie=cookie;    }    /**     * @param context ApplicationContext     */    public static void buildRequestQueue(Context context) {        mRequestQueue = Volley.newRequestQueue(context);        //... do something    }    /** (WangShuJie)增加代码 usage:非带参数*/    public static VolleyRequest newInstance() {        if (mRequestQueue == null) {            throw new NullPointerException("Call buildRequestQueue method first.");        }        //...        return new VolleyRequest();    }    /** (WangShuJie)增加代码 usage:带参数*/    public static VolleyRequest newInstance(Map<String,String> mMap) {        if (mRequestQueue == null) {//            throw new NullPointerException("Call buildRequestQueue method first.");        }        //...        Log.i("mtag","newInstance==========="+mMap.get("goodsname"));        return new VolleyRequest(mMap);    }    /** (WangShuJie)增加代码 usage:带参数*/    public static VolleyRequest newInstance(Map<String,String> mMap,String cookie) {        if (mRequestQueue == null) {//            throw new NullPointerException("Call buildRequestQueue method first.");        }        //...        Log.i("mtag","newInstance==========="+mMap.get("goodsname"));        return new VolleyRequest(mMap,cookie);    }    /**     * @param url     * @param clazz     * @param listener     * @param errorListener     *带参     * @return     */    public <T> GsonRequest<T> newGsonRequest2(int method,String url, Class<T> clazz, Response.Listener<T> listener,                                              Response.ErrorListener errorListener) {        GsonRequest<T> request = new GsonRequest(method,url, clazz, listener, errorListener){            @Override            protected Map<String, String> getParams() {                return mMap;            }            @Override            public Map<String, String> getHeaders() throws AuthFailureError {                Map<String,String> mMap=new HashMap<String, String>();                mMap.put("Cookie",cookie);                return mMap;            }        };        request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 1.0f));        mRequestQueue.add(request);        return request;    }    /** (WangShuJie)增加代码 usage:不带参的*/    public <T> GsonRequest<T> newGsonRequest(String url, Class<T> clazz, Response.Listener<T> listener,                                             Response.ErrorListener errorListener) {        GsonRequest<T> request = new GsonRequest(url, clazz, listener, errorListener);        request.setRetryPolicy(new DefaultRetryPolicy(5 * 1000,0, 1.0f));        mRequestQueue.add(request);        return request;    }}

3.使用

HashMap<String, String> map = new HashMap<>();VolleyRequest.newInstance(map,cookie).newGsonRequest2(Request.Method.POST, Constant.POST_URL + Constant.ROADNETWORK_APPER, StepModle.class,new Response.Listener<StepModle>() {    @Override  public void onResponse(StepModle stepModle) {    if (stepModle.isSuccess()) {        Toast.makeText(abApplication, stepModle.getMessage(), Toast.LENGTH_SHORT).show();  } else {        Toast.makeText(abApplication, stepModle.getMessage(), Toast.LENGTH_SHORT).show();        }  }      }, new Response.ErrorListener() {         @Override       public void onErrorResponse(VolleyError volleyError) {                Toast.makeText(abApplication, "访问服务器失败", Toast.LENGTH_SHORT).show();                            }                      });

只需要map(post请求携带的参数,cookie服务器端需要的cookie值,大部分服务器都不需要,传空就好,或者直接调用newInstance(map),已封装好)

newInstance(map,cookie)

如果是不带参(get请求),调用newGsonRequest,post请求如下

newGsonRequest2(Request.Method.POST, Constant.POST_URL + Constant.ROADNETWORK_APPER, StepModle.class,new Response.Listener<StepModle>

如果有什么问题可以留言,一起探讨

原创粉丝点击