2017-01-09 17 views
11

改造から空の応答を処理するためにObservable<Void>を返すために使用rxjavaの1.xiを使用する場合:改造とrxjava 2.xので空の応答を処理

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

しかしrxjava 2.xがVoidで何を放出しないのでこれらの空の応答を処理する良い練習はありますか?

答えて

24

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 
    }); 
-1

あなたはObservable<Object>を使用してみましたか?

enum Irrelevant { INSTANCE; } 

Observable<Object> source = Observable.create((ObservableEmitter<Object> emitter) -> { 
    System.out.println("Side-effect 1"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 2"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 3"); 
    emitter.onNext(Irrelevant.INSTANCE); 
}); 

source.subscribe(e -> { /* Ignored. */ }, Throwable::printStackTrace); 
0

別の解決策は次のとおりです:

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

これはRxJava 2の公式ドキュメントからです