我想将存储库响应作为祝酒词传播给用户,所以我将实时数据侦听器放在我的活动中后创建方法
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
}
我阅读了许多与此问题相关的主题,并且通常通过让提供者返回相同的数据库实例来解决这个问题,但据我所知,我的提供者应该始终返回相同的实例。任何想法和帮助将不胜感激。