ps:当初天真的以为这是处理app中各种异常的一个好方法,后面发现自己很傻很天真哈!不过当作分析了Retrofit的数据解析过程也可以。所以博文留着不删除哈
关于app异常处理可以看看我的另外一篇文章:
Retrofit+RxJava在MVP模式中优雅地处理异常
1.前言
强烈建议在了解Retrofit,RxJava,gson的情况下看此篇博文
2.异常的类型
在使用Retrofit+RxJava访问RestFul服务器的过程中,总免不了要处理错误,错误有很多种,例如服务器端的错误:密码错误,cookie过期等等。客户端中产生的错误:网络异常,解析数据出错等。但是这里就会出现一个问题,假如服务器返回的是统一数据格式:
/**
* 公共数据格式
* @author Mr.W
* @param <T>
*/
public class Result<T> {
public int state;
public String error;
public T infos;
}
那么此时,如果是网络错误等客户端错误,在使用Retrofit+RxJava时会直接调用subscribe的onError事件,但是如果是服务器端的错误,比如说密码错误等,此时还是会执行subscribe的onnext事件,而且必须在subscribe里面处理异常信息,这对于一个对架构有强迫症的人是难以忍受的,就好像下面的代码:
UserEngine.initUserInfo("username", "password")
.subscribe(new Observer<Result<Login>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Result<Login> data) {
if(data.sta