package com.tekinarslan.material.sample.common.volley;
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.apkfuns.logutils.LogUtils;
import com.tekinarslan.material.sample.common.utils.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
/**
* @ClassName: JsonObjectDefaultGetRequest
* @Description: JsonObject Get 请求
* @author liuyongzheng
* @date 2014-4-9 上午8:55:50
*/
public class JsonObjectDefaultGetRequest extends Request<JSONObject> {
private Listener<JSONObject> listener;
private final static String DEFAULT_PARAMS_ENCODING = "UTF-8";
private static String TAG = JsonObjectDefaultGetRequest.class.getSimpleName();
public JsonObjectDefaultGetRequest(String url, Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.listener = reponseListener;
}
public JsonObjectDefaultGetRequest(String url, Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) {
super(Method.GET, getFinalUrl(url, params), errorListener);
this.listener = reponseListener;
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
// LogUtils.d(TAG, "返回的jsonString====》"+StringEscapeUtils.unescapeJava(jsonString));
LogUtils.d("jsonString "+jsonString);
return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
@Override
protected void deliverResponse(JSONObject response) {
listener.onResponse(response);
}
/**
* @Description:[获取最终的URL]
* @param url
* @param params
* @return
*/
private static String getFinalUrl(String url, Map<String, String> params) {
StringBuilder encodedParams = new StringBuilder();
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
encodedParams.append(URLEncoder.encode(entry.getKey(), DEFAULT_PARAMS_ENCODING));
encodedParams.append('=');
if (!StringUtils.isEmpty(entry.getValue())) {
encodedParams.append(URLEncoder.encode(entry.getValue(), DEFAULT_PARAMS_ENCODING));
}
encodedParams.append('&');
}
String strParams = encodedParams.toString();
if (!StringUtils.isEmpty(strParams)) {
strParams = strParams.substring(0, strParams.length() - 1);
url = url + "&" + strParams;
}
LogUtils.d(TAG, "请求url====>"+url);
return url;
} catch (UnsupportedEncodingException uee) {
throw new RuntimeException("Encoding not supported: " + DEFAULT_PARAMS_ENCODING, uee);
}
}
}