Бесконечный цикл при обновлении в room с использованием rxJava

Краткий экскурс где происходит ошибка

Все я заккоментил, чтобы найти источник зла.

model.updateFavorite(it) он входит в бесконечный цикл.

Его код

fun updateFavorite(pokemon: PokemonEntity){
        Log.d("RefreshFavorite", pokemon.isFavorite.toString())
        pokemonsDao.update(pokemon)
    }

Какой метод он вызывает из Dao(room)

@Insert(onConflict = REPLACE)
    fun update(pokemon: PokemonEntity)

Я думаю про room лишнее, скорее всего я что-то не понимаю и сделал такую глупую ошибку, но я её не вижу. Проблема в том, что при вызове этого метода по обновлению данных, он начинает впадать в бесконечность. И все что далее .map и .subscribe они тоже выполняются бесконечно.

Как мне решить эту проблему?

И да. Если заменить flatMap на map, ничего не изменится (проблема именно с updateFavorite, model.getCardInfo(id) отрабатывает 1 раз нормально)


Ответы (1 шт):

Автор решения: ЮрийСПб

Судя по поведению у вас метод getCardInfo типом возвращаемого значения имеет Flowable или Observable. В таком случае вам будут приходить события каждый раз, когда меняется что-то в таблице, что вы и наблюдаете.

Чтобы это исправить - смените тип источника данных возвращаемого из метода getCardInfo на Single - он один раз получит данные и сразу завершится.

→ Ссылка