我正在使用RxJava和Retrofit2(以OkHttp作为HTTP客户端)进行网络连接,并试图了解Retrofit2如何处理不同的错误以及它们如何从RxJava端看。以下代码说明了网络调用的RxJava订阅者回调(使用Retrofit进行)。Retrofit2 + RxJava错误处理
Subscription subscription = observable
.subscribeOn(mScheduler)
.observeOn(mAndroidScheduler)
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
Timber.d("onCompleted called");
mRetainerView.clearUserObservable();
mActivityView.hideProgressBar();
mActivityView.enableUi();
}
@Override
public void onError(Throwable e) {
Timber.d("onError called");
Timber.d(e.toString());
mRetainerView.clearUserObservable();
mActivityView.hideProgressBar();
mActivityView.enableUi();
}
@Override
public void onNext(User user) {
Timber.d("onNext called");
mRetainerView.clearUserObservable();
mActivityView.hideProgressBar();
mActivityView.enableUi();
mActivityView.launchMainActivity();
}
});
我的问题是,在什么情况下会onerror的()被调用,一旦它被调用时,我怎么可以询问的Throwable,以确定原因是什么?
根据Retrofit源代码,它看起来像唯一可以看到的Throwables是IOException和HttpException。任何人都可以验证这是真的吗?