Rxjava和Retrofit进行封装时,对统一的数据格式的封装

当我们在使用Retrofit时,对返回的统一数据格式都是要做一次统一处理的。因为后台返回给我们的json数据,都有一个固定的格式,让我们判断这次返回的数据是成功的还是失败的,如果是失败的我们就可以直接走失败了,如果是成功的我们就可以对数据进行操作,让数据显示在界面上。通常这个数据格式是这样的:{"status":0,"msg":"成功","data":{}}

首先我们要把这个json转换成一个JavaBean对象,而这个Bean是这样的

public class HttpResponse<T> {
    public int status;
    public String msg;

    @Override
    public String toString() {
        return "HttpResponse{" +
                "status=" + status +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }

    public T data;
}

而RxJava是用一个Observer来对这个返回的数据进行处理的,这时候我定义一个继承自Observer的类来处理这些公共的地方

public abstract class BaseObserver<T> implements Observer<HttpResponse2<T>> {
    @Override
    public void onSubscribe(Disposable d) {
        onStart(d);
    }

    @Override
    public void onNext(HttpResponse2<T> result) {
        if(result.status == 0){
            try {
                onSuccess(result.data);
            }catch (Exception e){
                e.printStackTrace();
            }
        }else{
            //而这个地方可以自定义一个Exception,用于处理后台返回给我们的错误
            onError(new Exception(result.message));
        }
    }

    @Override
    public void onError(Throwable e) {
        e.printStackTrace();
    }

    @Override
    public void onComplete() {

    }

    /**
     * 开始
     * @param d 可以用来处理内存泄露
     */
    public void onStart(Disposable d){
        d.dispose();
    }

    /**
     * 返回数据成功
     * @param t 返回的数据
     */
    public abstract void onSuccess(T t);
}

猜你喜欢

转载自blog.csdn.net/qqqq245425070/article/details/79508699