如何在RxJava中处理`IllegalArgumentException?

bli*_*ard 5 android rx-java retrofit

我使用的是RetrofitRxJava为网络电话和RxBinding用于查看操作.在注册屏幕中,单击"注册"按钮后,我将使用该MyApi服务将信息发布到本地服务器.

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());
        }));
  }
Run Code Online (Sandbox Code Playgroud)

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());
  }
Run Code Online (Sandbox Code Playgroud)

MyService.class

  @FormUrlEncoded @POST("users/")
  Observable<User> registerUser(@Path("email") String username,
      @Path("password") String password, @Path("password_confirmation") String confirmPassword);
Run Code Online (Sandbox Code Playgroud)

IllegalArgumentException由于我发布了无效信息,因此呼叫失败.

我的主要问题是,IllegalArgumentException我认为RxJava会执行,registerUser()#ErrorHandler()因为我的registerUser服务调用因异常而失败,而是调用RxView#ErrorHandler().

如何处理/强制registerUser()#ErrorHandler()处理网络呼叫期间发生的异常?

bli*_*ard 2

我的不好的是,网络调用没有失败IllegalArgumentException,但请求构造本身失败了IllegalArgumentException

java.lang.IllegalArgumentException: URL "users/" does not contain {email}". 
Run Code Online (Sandbox Code Playgroud)

我没有使用@Field注释来构建 POST 主体,而是错误地使用了@Path注释。

正确的定义:

 @FormUrlEncoded @POST("users/")
 Observable<User> registerUser(@Field("email") String username,
      @Field("password") String password, @Field("password_confirmation") String confirmPassword);
Run Code Online (Sandbox Code Playgroud)