2015-11-05 9 views
5

私は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時に私は私のregisterUserサービスコールが例外で失敗しましたが、代わりに、それはRxView#ErrorHandler()を呼び出すので、RxJavaregisterUser()#ErrorHandler()を実行するだろうと思っています。

registerUser()#ErrorHandler()は、ネットワークコール中に発生した例外を処理するにはどうすればよいですか?

+2

。 RxJavaが関与する前に起こる可能性があります。 – akarnokd

+0

"e"の種類は何ですか?すべての例外をキャッチするのに十分な一般性はないのでしょうか? – Yoshkebab

答えて

2

悪いですが、ネットワークコールはIllegalArgumentExceptionで失敗しませんが、リクエスト構築自体がIllegalArgumentExceptionで失敗しました。

java.lang.IllegalArgumentException: URL "users/" does not contain {email}". 

代わりのPOSTボディを構築するため@Field注釈を使用して、私が誤って@Path注釈を使用したいです。

正しい定義:例外のスタックトレースは何

@FormUrlEncoded @POST("users/") 
Observable<User> registerUser(@Field("email") String username, 
     @Field("password") String password, @Field("password_confirmation") String confirmPassword); 
関連する問題