Stack Overflow на русском Asked on December 30, 2021
Есть программа для работы со списками.
По интерфейсу есть два основных окна, в одном лист со списками, и по клику со конкретному списку по подаем на экран с элементами списка.
Приложение представляет собой SingleActivity moxy+androidx.navigation+rxjava
Проблема возникает при следующем кейсе.
Я открываю deeplink в мессанжере, скачиваю новые данные из firebase, сохраняю данные в room и после этого автоматом пытаюсь уже перейти на новый фрагмент
Вот так не работает
model.saveShop(dlDl, currentDlId).observeOn(mainThread)
.subscribe { list->
goToList(listId = list.id!!)}}
А вот так уже работает
model.saveShop(dlShop, currentDlId).observeOn(mainThread)
.subscribe { list->
Single
.timer(100,TimeUnit.MILLISECONDS)
.observeOn(mainThread).subscribe { _->
goToList(listId = list.id!!)
}
}
Пробовал во втором(проблемном фрагменте раставлять точки breakPoint и логи)
В итоге по логам второй фрагмент пытается запускаться, метод onCreateView отрабатывает, в презетере attachView тоже отрабатывается, данные с загруженого листа в полной мере загружаются из базы данных, но логи раставленые в фрагменте на вызовы функций из презеттера типа viewState.doSomething() уже не вызываются
в логах нет ни единой ошибки или краша
Что может происходить такого, чтоб фрагмент в итоге не запускался.
Room товарищ весьма умный, и часто позволяет себе асинхронность там, где может ее обеспечить. Тот факт что задержка в 100мс решает вашу проблему говорит мне, что вы столкнулись именно с таким поведением. Заставьте его притормозить прицепив к @Insert методу возвращаемое значение, должно помочь
@Dao
public interface SomeDao {
@Insert(onConflict = REPLACE)
fun addSome(Some object): Int
}
Теперь методу придется сначала выполнится целиком чтобы вернуть вам айдишник вставленного элемента. А на всякий случай я бы еще и клал это число в какую-то переменную и выводил в логи, а то Cursor из обычной библиотеки с SQLite вам возвращается почти мгновенно всегда, но данных в нем еще может не быть, т.к. они асинхроно добываются. И когда вы попытаетесь получить первую строчку подвисните на 300мс, а все последуюшщие будут читаться за 1мс. Вдруг тут каким-то образом тоже так сработает?
Answered by Спицко Дмитрий on December 30, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP