2017-01-09 91 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); 

而且使用Observable<Object>重寫你的用戶,例如:

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

你試試?

這是從RxJava 2的正式文檔:

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