web-dev-qa-db-ja.com

レトロフィットとrxjava 2.xで空の応答を処理する

Rxjava 1.xを使用する場合、レトロフィットからの空の応答を処理するためにObservable<Void>を返していました。

@POST( "login" )
Observable<Void> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );

しかし、rxjava 2.xはVoidで何も出力しないので、これらの空の応答を処理するための良い習慣はありますか?

21
Samuel Eminet

Completable はそのような場合のために設計されました。利用可能 since RxJava 1.1.1。公式ドキュメントから:

値のない遅延計算を表しますが、完了または例外を示すだけです。このクラスは、Reactive-Streamsと同様のイベントパターンに従います:onSubscribe(onError | onComplete)?

したがって、メソッドの戻り値の型を変更するだけです。

@POST("login")
Completable getToken(@Header("Authorization") String authorization,
                     @Header("username")      String username,
                     @Header("password")      String password);

そして、あなたの加入者を書き直してください、例えば:

apiManager.getToken(auth, name, pass)
    ...
    .subscribe(() -> {
        //success
    }, exception -> {
        //error
    });
35

別の解決策は:

@POST("login")
Observable<Response<Void>> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );
6
Leo Droidcoder