2017-01-09 3 views
11

При использовании rxjava 1.xi используется для возвращения Observable<Void> для обработки пустого ответа от модификации:Ручка пустого ответа с модифицированным и 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>?

Это из официальной документации 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); 
Смежные вопросы