天天看點

網絡層架構設計與實戰十五錯誤碼的處理

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

}