Volley请求封装

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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值