LiveData 未从 Room 中的插入更新

问题描述 投票:0回答:0

我想将存储库响应作为祝酒词传播给用户,所以我将实时数据侦听器放在我的活动中后创建方法

mainViewModel.toast.observe(this) {
            Log.d(TAG, "initViews: $it")
            if (it.notPropagated) {
                Toast.makeText(
                    this,
                    it.message,
                    if (!it.longToast) Toast.LENGTH_SHORT else Toast.LENGTH_LONG
                ).show()
                mainViewModel.setMessageToPropagated()
            }
        }

toast 是从数据库中获取的流创建的简单实时数据

val toast = mainRepository.getMessage().asLiveData(viewModelWorkerContext)

但是当我试图通过使用插入来更改其他片段中的数据库中的数据时,它实际上从未根据更改进行更新,只有当我重新启动应用程序时,它才会从数据库中获取内容并响应将消息更改为“ used" 并且触发 livedata 没有问题。 这是我的 DAO:

mainViewModel.setMessageToPropagated()

最后,供应商

@Dao interface RoomDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun setMessage(message: SingleTimeUserMessage) @Query("SELECT * FROM SingleTimeUserMessage WHERE notPropagated = true LIMIT 1") fun getMessageToPropagate(): Flow<SingleTimeUserMessage> @Query("SELECT * FROM SingleTimeUserMessage LIMIT 1") fun getMessageToPropagated(): SingleTimeUserMessage }

我阅读了许多与此问题相关的主题,并且通常通过让提供者返回相同的数据库实例来解决这个问题,但据我所知,我的提供者应该始终返回相同的实例。任何想法和帮助将不胜感激。

android kotlin android-room android-livedata
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.