【发布时间】:2020-12-15 17:43:26
【问题描述】:
所以目前我有一个带有发出 Flow 的函数的 Dao
@Query("SELECT * FROM ${Constants.Redacted}")
fun loadAllContacts(): Flow<List<Redacted>>
我从这样的存储库中调用它
val loadAllContacts: Flow<List<Redacted>> = contactDao.loadAllContacts()
我将存储库注入到 viewModel 的构造函数中,然后在我的 viewModel 顶部我有一个类似这样的 val
val contacts: LiveData<List<Redacted>> = contactRepository.loadAllContacts.asLiveData()
在我的活动中观察到了这样的情况
viewModel.contacts.observe(this) { contacts ->
viewModel.onContactsChange(contacts)
}
我的想法是 Flow 被转换为 LiveData,然后我可以从我的活动中观察这个 LiveData 并启动这个函数,以便在数据更新时实际更新 viewModel。
现在onContactsChange 看起来像
fun onContactsChange(list: List<Redacted>) {
Timber.i("VIEW UPDATE")
}
问题是我只在打开活动时才看到这个 Timber 日志,以后再也看不到了。我验证了数据正在进入我的数据库,并且我验证了在活动和视图模型打开时插入成功。但我再也没有看到来自onContactsChange 的日志。当我关闭活动并重新打开它时,我确实看到了我的新数据,这是我知道我的插入工作正常的另一个原因。
我想补充一点,我正在使用我的存储库的单个实例(单例),并且我认为我可以通过我可以看到我的数据这一事实来验证这一点,至少在第一次创建视图时是这样。
【问题讨论】: