Номер Android с RxJava обрабатывает пустой результат запроса

Попытка протестировать новую библиотеку Android Room с адаптером RxJava. И я хочу обработать результат, если мой запрос возвращает 0 объектов из БД:

Итак, вот метод DAO:

@Query("SELECT * FROM auth_info") fun getAuthInfo(): Flowable<AuthResponse> 

И как я справляюсь с этим:

  database.authDao().getAuthInfo() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .switchIfEmpty { Log.d(TAG, "IS EMPTY") } .firstOrError() .subscribe( { authResponse -> Log.d(TAG, authResponse.token) }, { error -> Log.d(TAG, error.message) }) 

Моя БД пуста, поэтому я ожидаю .switchIfEmty (), но никто из методов обработки не стреляет. Ни .subscribe (), ни .switchIfEmpty ()

Db Flowables являются наблюдаемыми (поэтому они продолжают отправлять сообщения при изменении базы данных), поэтому они никогда не завершаются. Вы можете попробовать вернуть List<AuthResponse> . Мы рассмотрели возможность портирования опциона, но решили не делать этого, по крайней мере пока. Вместо этого мы, вероятно, добавим поддержку Необязательного в разные известные библиотеки.

В версии 1.0.0-alpha5 добавлена ​​поддержка Maybe и Single для DAO, поэтому теперь вы можете написать что-то вроде

 @Query("SELECT * FROM auth_info") fun getAuthInfo(): Maybe<AuthResponse> 

Вы можете узнать больше об этом здесь

switchIfEmpty принимает как параметр Publisher<AuthResponse> . Через SAM-преобразование ваша анонимная функция превращается в этот класс. Однако это не соответствует поведению, ожидаемому от Publisher поэтому оно не будет работать должным образом.

Замените его правильной реализацией, такой как Flowable.empty().doOnSubscribe { Log.d(TAG, "IS EMPTY") } и он должен работать.

Intereting Posts