1.封装GsonRequest
package com.inspur.handnwom.content.reportdeal.utilsimport android.util.Logimport 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.TypeTokenimport java.io.UnsupportedEncodingExceptionpublic class GsonRequest<T> extends Request<T> {private final Listener<T> mListenerprivate static Gson mGson = new Gson()private String urlprivate Class<T> mClassprivate TypeToken<T> mTypeTokenpublic GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {super(method, url, errorListener)mClass = clazzthis.url = urlmListener = listener}public GsonRequest(int method, String url, TypeToken<T> typeToken, Listener<T> listener,ErrorListener errorListener) {super(method, url, errorListener)this.url = urlmTypeToken = typeTokenmListener = 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 = urlmTypeToken = typeTokenmListener = listener}@Overrideprotected 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))elsereturn (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))}}@Overrideprotected 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);}/** (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) {
}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) {
}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){@Overrideprotected Map<String, String> getParams() {return mMap;}@Overridepublic 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>() {@Overridepublic 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() {@Overridepublic 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>
如果有什么问题可以留言,一起探讨