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
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);
}
/** (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){
@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>
如果有什么问题可以留言,一起探讨