package com.yaoyumeng.v2ex.api; import android.content.Context; import com.loopj.android.http.JsonHttpResponseHandler; import com.yaoyumeng.v2ex.model.PersistenceHelper; import com.yaoyumeng.v2ex.model.V2EXModel; import org.apache.http.Header; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; /** * Created by yw on 2015/5/2. */ class WrappedJsonHttpResponseHandler<T extends V2EXModel> extends JsonHttpResponseHandler { HttpRequestHandler<ArrayList<T>> handler; Class c; Context context; String key; public WrappedJsonHttpResponseHandler(Context cxt, Class c, String key, HttpRequestHandler<ArrayList<T>> handler) { this.handler = handler; this.c = c; this.context = cxt; this.key = key; } @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { ArrayList<T> models = new ArrayList<T>(); try { T obj = (T) Class.forName(c.getName()).newInstance(); obj.parse(response); if (obj != null) models.add(obj); } catch (Exception e) { } PersistenceHelper.saveModelList(context, models, key); SafeHandler.onSuccess(handler, models); } @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { ArrayList<T> models = new ArrayList<T>(); for (int i = 0; i < response.length(); i++) { try { JSONObject jsonObj = response.getJSONObject(i); T obj = (T) Class.forName(c.getName()).newInstance(); obj.parse(jsonObj); if (obj != null) models.add(obj); } catch (Exception e) { } } PersistenceHelper.saveModelList(context, models, key); SafeHandler.onSuccess(handler, models); } @Override public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable e) { handleFailure(statusCode, e.getMessage()); } public void onFailure(int statusCode, Header[] headers, Throwable e, JSONObject errorResponse) { handleFailure(statusCode, e.getMessage()); } public void onFailure(int statusCode, Header[] headers, Throwable e, JSONArray errorResponse) { handleFailure(statusCode, e.getMessage()); } private void handleFailure(int statusCode, String error) { error = V2EXErrorType.errorMessage(context, V2EXErrorType.ErrorApiForbidden); SafeHandler.onFailure(handler, error); } }