【问题标题】:LiveData never gets updatedLiveData 永远不会更新
【发布时间】:2020-02-13 15:41:40
【问题描述】:

在我的应用程序中,我使用房间插入了几个“路线”对象。插入后,应用程序会直接显示一个我需要数据的新屏幕。

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

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

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

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

【问题讨论】:

  • 能否请您发布您的插入查询功能。

标签: android-room android-livedata


【解决方案1】:

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

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

很遗憾,LiveData 不支持插入/删除/更新操作的回调响应。

根据 google 文档 (Source),对于 One-shot 写入/读取,LiveData 支持不适用。 我推荐使用 Long 对象包装的 RxJava 的 Single。

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

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

【讨论】:

  • 使用 RX 不是我希望的选择。
  • @Kitesurfer 我知道你不想仅仅为了这个用例而介绍 Rx。您能否在新屏幕上发布用于观察数据变化的代码。如果您观察 onCreateView() 中的实时数据,数据应该会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
相关资源
最近更新 更多