网络层架构设计与实战十五错误码的处理

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

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值