LiveData永远不会更新

时间:2020-02-13 15:41:40

标签: android-room android-livedata

在我的App中,我使用room插入了两个“ route”对象。在执行插入操作后,应用程序立即显示一个新屏幕,我需要数据。

问题看起来好像是在创建新视图之后发生的,我使用ViewModel-> Repository-> DAO插入数据

在下一个屏幕上,我观察数据

@Query("SELECT * from RouteEntity")
fun getRoutesAsLiveData(): LiveData<List<RouteEntity>>

我如何“同步”似乎已在新屏幕显示后运行的插入触发观察到的实时数据?

1 个答案:

答案 0 :(得分:1)

据我了解,您想在插入数据后立即导航到新屏幕,并且还希望观察数据库中新插入的数据。

插入是异步操作,您可能必须等待插入确认回调才能将用户带到新屏幕。

不幸的是,LiveData不支持对插入/删除/更新操作的回调响应。

根据Google文档(Source),LiveData支持不适用于一次写入/读取。 我建议使用长对象包装RxJava的Single。

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  fun insert(routeEntity: RouteEntity): Single<Long>

其中Long返回所插入项目的rowId。 通过这种方法,当您从Single收到onSuccess()响应时,可以将用户带到新屏幕。