package com.wisedu.scc.love.widget.http; import android.os.Message; import android.util.Log; import com.loopj.android.http.TextHttpResponseHandler; import org.apache.http.Header; import java.io.UnsupportedEncodingException; public class AutoHttpResponseHandler extends TextHttpResponseHandler { private static final String LOG_TAG = "AutoHttpResponseHandler"; private final static boolean DEBUG = true; public final static String MSG = "session is out date!"; private HttpManager.HttpConfig httpConfig; private boolean isRetry = false; public void setHttpConfig(HttpManager.HttpConfig config) { httpConfig = config; } public void setRetryRequest(boolean retry) { isRetry = retry; } protected void sendMessage(Message msg) { if (DEBUG) Log.v(LOG_TAG, "sendMessage..." + msg.what); if (msg.what == START_MESSAGE) { final RequestInterpator interpator = httpConfig .getRequestInterpator(); if (interpator != null) { interpator.requestStart(); } } else if (msg.what == SUCCESS_MESSAGE) { if (isRetry && httpConfig != null) { isRetry = false; final RequestInterpator interpator = httpConfig .getRequestInterpator(); if (interpator != null) { Object[] response = (Object[]) msg.obj; try { final String content = new String((byte[]) response[2], getCharset()); final int status = JsonParams.fromJson(content) .getStatus(); if (interpator.intercept(getRequestURI().toString(), status) && interpator.loginOffline()) { Log.v(LOG_TAG, "throw new HttpRetryException..."); throw new HttpRetryException(MSG); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } } if (DEBUG) Log.v(LOG_TAG, "sendMessage goon..."); super.sendMessage(msg); } /** * Fired when a request fails to complete, override to handle in your own code * * @param statusCode the status code of the response * @param headers HTTP response headers * @param responseBody the response body, if any * @param error the underlying cause of the failure */ @Override final public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) { final HttpManager.HttpConfig httpConfig = this.httpConfig; if (DEBUG) Log.v(LOG_TAG, "onFailure statusCode = " + statusCode + " responseBody = " + responseBody); if (httpConfig != null) { ErrorCodeHandler errorCodeHandler = httpConfig.getErrorCodeHandler(); if(errorCodeHandler != null) { final String content = errorCodeHandler.processError(statusCode); processResult(headers, content); } else { processResult(headers, responseBody); } } } /** * Fired when a request returns successfully, override to handle in your own code * * @param statusCode the status code of the response * @param headers HTTP response headers * @param responseBody the body of the HTTP response from the server */ @Override final public void onSuccess(int statusCode, Header[] headers, String responseBody) { if (DEBUG) Log.v(LOG_TAG, "onSuccess statusCode = " + statusCode + " responseBody = " + responseBody); processResult(headers, responseBody); } private void processResult(Header[] headers, String content) { final int state = JsonParams.fromJson(content).getState(); final int status = JsonParams.fromJson(content).getStatus(); final String data = JsonParams.fromJson(content).getData(); final String msg = JsonParams.fromJson(content).getMsg(); onSuccess(headers, state, status, data, msg); } protected void onSuccess(Header[] headers, int state, int status, String data, String msg) { }; }