1、错误码的处理本身和网络框架关联并不大,原因是错误码的处理本身是属于业务逻辑的,每种错误码的处理方式是不一样的。
2、如果错误码等于0,说明结果是正确的,可以正常返回,否则说明需要进行异常处理
package www.imooc.com.okhttp;
import android.content.Context;
import com.nice.http.Response;
import com.nice.Callback;
/**
* @author nate
* @since 2017/10/18.
*/
public abstract class BasicCallback<T extends ResultResponse> implements Callback<T> {
private ErrorCallback mDelegate;
public BasicCallback(Context context) {
this.mDelegate = new ErrorCallback(context);
}
/**
* 请求成功
*
* @param response {@link Response 响应实体}
*/
@Override
public void onSuccess(final Response<T> response) {
if (response.body().getErrorCode() == 0) {
success(response.body());
} else {
mDelegate.onSuccess(response);
failure(response.body().getErrorCode(), response.body().getErrorMsg());
}
}
public abstract void success(T response);
public abstract void failure(int errorCode, String errorMsg);
/**
* 请求失败
*
* @param exception 请求错误信息
*/
@Override
public void onFailure(Throwable exception) {
mDelegate.onFailure(exception);
failure(mDelegate.errorCode(exception), exception.getMessage());
}
}
3、ErrorCallback用来处理默认错误的处理
package www.imooc.com.okhttp;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
import com.nice.http.Response;
import com.nice.Callback;
import java.io.IOException;
/**
* @author nate
* @since 2017/10/18.
*/
public class ErrorCallback<T extends ResultResponse> implements Callback<T> {
public static final int PASSWORD_ERROR_CODE = 1003;
public static final int NETWORK_ERROR_CODE = 1002;
public static final int DEFAULT_ERROR_CODE = 1001;
private Handler mHandler = new Handler(Looper.getMainLooper());
private Context mContext;
public ErrorCallback(Context context) {
this.mContext = context;
}
/**
* 请求成功
*
* @param response {@link Response 响应实体}
*/
@Override
public void onSuccess(Response<T> response) {
switch (response.body().getErrorCode()) {
case PASSWORD_ERROR_CODE:
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "密码错误", Toast.LENGTH_SHORT).show();
}
});
break;
}
}
/**
* 请求失败
*
* @param exception 请求错误信息
*/
@Override
public void onFailure(Throwable exception) {
if (exception instanceof IOException) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "网络连接异常", Toast.LENGTH_SHORT).show();
}
});
}
}
public int errorCode(Throwable exception) {
if (exception instanceof IOException) {
return NETWORK_ERROR_CODE;
} else {
return DEFAULT_ERROR_CODE;
}
}
}