Intereting Posts
Котлин || Элемент Recycleview не раздувается: недоступный код для каждого переопределенного метода RecycleView.Adapter kapt – java.lang.OutOfMemoryError: превышен верхний предел GC Добавление «предоставленной» конфигурации в библиотеку kotlin / java с использованием gradle Каким образом можно создать и опубликовать библиотеку Kotlin, чтобы избежать многократного запуска? Spring Boot: добавление @Transactional создает java.lang.ClassNotFoundException: org.aspectj.util.PartialOrder $ PartialComparable Kotlin – Значение преобразования при инициализации Kotliquery не закрывает связи postgresql Диапазоны в Котлин с использованием типа данных Double Выделение синтаксиса для файлов сценариев Kotlin в Idea Kotlin Exposed не совершает транзакции Ссылка Int :: class.javaPrimitiveType.kotlin не равна Int :: class.javaObjectType.kotlin RxJava: как вернуть правильный тип null Querydsl – результат разделения на два или более объекта Отсутствует конструктор для DialogPreference Имя файла, имя каталога или синтаксис метки тома неверны – Kotlin – Maven

Номер 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") } и он должен работать.