package com.common.net.volley;
import java.util.HashMap;
import java.util.Map;
import android.net.Uri;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
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.VolleyError;
import com.wb.sc.config.DebugConfig;
public abstract class ParamsRequest<T> extends Request<T> {
public static final String TAG = "volley_request";
private Map<String, String> params;
private Listener<T> mListener;
private TagListener<T> mTagListener;
private TagErrorListener tagErrorListener;
public ParamsRequest(int method, String url, Map<String, String> params, Listener<T> listenre, ErrorListener errorListener) {
super(method, formatUrlParams(url, method, params), errorListener);
mListener = listenre;
this.params = params;
}
public ParamsRequest(int method, String url, Map<String, String> params, Listener<T> listenre, TagErrorListener errorListener) {
super(method, formatUrlParams(url, method, params), null);
mListener = listenre;
tagErrorListener = errorListener;
this.params = params;
}
public ParamsRequest(int method, String url, Map<String, String> params, TagListener<T> listenre, TagErrorListener errorListener) {
super(method, formatUrlParams(url, method, params), null);
mTagListener = listenre;
tagErrorListener = errorListener;
this.params = params;
}
@Override
abstract protected Response<T> parseNetworkResponse(NetworkResponse response);
@Override
protected void deliverResponse(T response) {
if(mTagListener == null) {
mListener.onResponse(response);
} else {
mTagListener.onResponse(response, getTag());
}
}
@Override
public void deliverError(VolleyError error) {
if(tagErrorListener == null) {
super.deliverError(error);
} else {
tagErrorListener.onErrorResponse(error, getTag());
}
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Charset", "UTF-8");
headers.put("accessToken", "A0BAA87FCF5D187EC9582866B9AE1A3B");
return headers;
}
/**
* @param params
* @return
*/
private static String formatUrlParams(String url, int method, Map<String, String> params) {
String query="";
if(method == Method.GET || method == Method.DELETE || method == Method.PUT) {
String[] keys = params.keySet().toArray(new String[] {});
for(int i = 0, size = keys.length; i < size; i++) {
String key = keys[i];
String value = params.get(key).replaceAll("\n", "");
query += (i == 0 ? "?" : "&");
query += key;
query += "=";
query += Uri.encode(value);
}
}
if(DebugConfig.SHOW_DEBUG_MESSAGE) {
DebugConfig.showLog(TAG, "start ====================== volley request =====================");
if(Method.POST == method) {
for(String key : params.keySet()){
DebugConfig.showLog(TAG, key + "=" + params.get(key));
}
}
}
url += query;
DebugConfig.showLog(TAG, url);
return url;
}
/** Callback interface for delivering error responses. */
public interface TagErrorListener {
/**
* Callback method that an error has been occurred with the
* provided error code and optional user-readable message.
*/
public void onErrorResponse(VolleyError error, Object tag);
}
/** Callback interface for delivering parsed responses. */
public interface TagListener<T> {
/** Called when a response is received. */
public void onResponse(T response, Object tag);
}
}