当我们在使用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); }