我正在使用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。任何人都可以驗證這是真的嗎?