Intereting Posts
Android: запустите 4 async-задачи (которые работают с Rest API), подождите и начните еще одно действие после выполнения всех задач Проверка значений параметров EditText вызывает сбой kotlin.TypeCastException: null не может быть применено к ненулевому типу com.midsizemango.databasekotlin.Note Обратный вызов конструктора с несколькими параметрами Файл Kotlin против класса. Какая разница? Kotlin – объявить общий класс с параметром типа, который является общим Почему Котлин держит MetaData в файле класса Kotlin? Как autowire SessionFactory в спящем режиме 5? Оператор неразрешенных времен Вызывается: rx.exceptions.MissingBackpressureException Kotlin не может идентифицировать параметры, если явно не указано Комната Android не возвращает ничего с url как параметр Как добавить несколько исторических данных в GoogleFit Kotlin: Оператор '==' не может применяться к 'kotlin.Int' и 'Person?' ошибка Есть ли в Swift эквивалентная функция Kotlin `with`?

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