package net.coding.program.common.base;
import android.content.Context;
import com.loopj.android.http.JsonHttpResponseHandler;
import net.coding.program.common.Global;
import net.coding.program.common.network.NetworkImpl;
import net.coding.program.common.util.SingleToast;
import org.apache.http.Header;
import org.json.JSONObject;
/**
* Created by chenchao on 15/10/11.
*/
public abstract class MyJsonResponse extends JsonHttpResponseHandler {
private long startTime;
public void onMySuccess(JSONObject response) {
}
@Override
public void onStart() {
super.onStart();
startTime = System.currentTimeMillis();
}
public void onMyFailure(JSONObject response) {
if (response == null) {
SingleToast.showMiddleToast(mActivity, NetworkImpl.ERROR_MSG_CONNECT_FAIL);
} else {
int code = response.optInt("code", NetworkImpl.NETWORK_ERROR);
SingleToast.showErrorMsg(mActivity, code, response);
}
}
private Context mActivity;
public MyJsonResponse(Context activity) {
super();
mActivity = activity;
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
int code = response.optInt("code", -1);
if (code == 0) {
onMySuccess(response);
} else {
onMyFailure(response);
}
}
@Override
public void onFinish() {
super.onFinish();
// Log.e("MyJsonResponse", "onFinish API execute time = " + (System.currentTimeMillis() - startTime) + "ms");
}
// 没有网络的情况下,会调用这个回调函数,并且 errorResponse 为 null
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
if (errorResponse == null) {
errorResponse = sNetworkError;
}
onMyFailure(errorResponse);
}
// 服务器异常的时候会调用,这个时候返回的是 responseString,一般是 html 代码
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString, throwable);
onMyFailure(sServiceError);
}
static JSONObject sNetworkError;
static JSONObject sServiceError;
static {
try {
String connectFailString = String.format("{\"code\":%d,\"msg\":{\"error\":\"%s\"}}",
NetworkImpl.NETWORK_ERROR, NetworkImpl.ERROR_MSG_CONNECT_FAIL);
sNetworkError = new JSONObject(connectFailString);
String serviceFailString = String.format("{\"code\":%d,\"msg\":{\"error\":\"%s\"}}",
NetworkImpl.NETWORK_ERROR_SERVICE, NetworkImpl.ERROR_MSG_SERVICE_ERROR);
sServiceError = new JSONObject(serviceFailString);
} catch (Exception e) {
Global.errorLog(e);
}
}
}