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