Обрабатывать пустой отклик с помощью модификации и 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
, есть ли хорошая практика для обработки этих пустых ответов?
Ответы
Ответ 1
Completable был разработан для таких случаев. Он доступен с 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
});
Ответ 2
Другое решение:
@POST( "login" )
Observable<Response<Void>> getToken( @Header( "Authorization" ) String authorization,
@Header( "username" ) String username,
@Header( "password" ) String password );
Ответ 3
Вы пытались использовать 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);