/* * Created by Storm Zhang, Feb 11, 2014. */ package com.likebamboo.osa.android.request; import android.text.TextUtils; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; /** * JSON请求 * * @param <T> */ public class JsonRequest<T> extends BaseRequest<T> { protected final ObjectMapper mapper = new ObjectMapper(); protected final Class<T> mClazz; private final Listener<T> mListener; protected final Map<String, String> mParams; /** * 是否仅仅解析返回数据中 result 字段的数据 */ private boolean justResult = false; public JsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { this(url, clazz, null, listener, errorListener); } public JsonRequest(String url, Class<T> clazz, Map<String, String> params, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, formatUrl(url, params), errorListener); this.mClazz = clazz; this.mParams = params; this.mListener = listener; } public JsonRequest(int method, String url, Class<T> clazz, Map<String, String> params, Listener<T> listener, ErrorListener errorListener) { super(method, formatUrl(method, url, params), errorListener); this.mClazz = clazz; this.mParams = params; this.mListener = listener; } @Override public Map<String, String> getParams() throws AuthFailureError { return mParams != null ? mParams : super.getParams(); } public boolean isJustResult() { return justResult; } public void setJustResult(boolean justResult) { this.justResult = justResult; } @Override protected void deliverResponse(T response) { if (mListener == null) { return; } mListener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); if (TextUtils.isEmpty(json)) { return Response.error(new VolleyError("返回数据为空")); } if (justResult) { json = getResult(json); } return Response.success(mapper.readValue(json, mClazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } catch (JsonParseException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } catch (IOException e) { e.printStackTrace(); return Response.error(new ParseError(e)); } catch (Exception e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } }