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;
}
}
}