2017-01-09 10 views
11

Podczas korzystania 1.xi rxjava używany do powrotu Observable<Void> obsługiwać pusty odpowiedzi z modernizacją:Uchwyt pustą odpowiedź z modernizacją i rxjava 2.x

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

Ale ponieważ rxjava 2.x nie wyda niczego z Void czy istnieje jakaś dobra praktyka radzenia sobie z tymi pustymi odpowiedziami?

Odpowiedz

24

Completable został zaprojektowany do takich przypadków. Jest dostępny since RxJava 1.1.1. Z oficjalnych dokumentów:

Reprezentuje odroczone obliczenia bez żadnej wartości, ale tylko wskazanie zakończenia lub wyjątku. Klasa ma podobny wzorzec zdarzeń, jak Reactive-Streams: onSubscribe (onError | onComplete)?

Więc po prostu zmienić metodę za Zwraca typ:

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

I przepisać abonenta, np .:

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

Próbowałaś użyciu Observable<Object>?

To z oficjalnej dokumentacji 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

Innym rozwiązaniem jest:

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