我正在使用Retrofit
,RxJava
用於網絡調用,RxBinding
用於查看操作。在註冊屏幕上,點擊「註冊」按鈕後,我使用MyApi
服務將信息發佈到本地服務器。如何處理RxJava中的`IllegalArgumentException`?
SignupActivity.class
mCompositeSubscription.add(RxView.clicks(mRegisterButton).debounce(300, TimeUnit.MILLISECONDS).
subscribe(view -> {
registerUser();
}, e -> {
Timber.e(e, "RxView ");
onRegistrationFailed(e.getMessage());
}));
private void registerUser() {
mCompositeSubscription.add(api.registerUser(mEmail,
mPassword, mConfirmPassword)
.subscribe(user -> {
Timber.d("Received user object. Id: " + user.getUserId());
}, e -> {
Timber.e(e, "registerUser() ");
onRegistrationFailed(e.getMessage());
}));
}
MyApi.class
public Observable<User> registerUser(String username, String password, String confirmPassword) {
return mService.registerUser(username, password, confirmPassword)
.compose(applySchedulers());
}
@SuppressWarnings("unchecked") <T> Observable.Transformer<T, T> applySchedulers() {
return observable -> observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
MyService.class
@FormUrlEncoded @POST("users/")
Observable<User> registerUser(@Path("email") String username,
@Path("password") String password, @Path("password_confirmation") String confirmPassword);
通話由於我發佈的信息無效,因此無法使用IllegalArgumentException
。
什麼是我的主要問題是,在IllegalArgumentException
我想RxJava
將執行registerUser()#ErrorHandler()
因爲我registerUser
服務調用發生意外導致失敗,而是它調用RxView#ErrorHandler()
。
如何讓/強制registerUser()#ErrorHandler()
照顧網絡通話期間發生的異常?
有什麼異常的堆棧跟蹤。這可能發生在RxJava甚至涉及之前。 – akarnokd
什麼類型是「e」?也許它不足以捕獲所有異常? – Yoshkebab