在我的App中,我使用room插入了两个“ route”对象。在执行插入操作后,应用程序立即显示一个新屏幕,我需要数据。
问题看起来好像是在创建新视图之后发生的,我使用ViewModel-> Repository-> DAO插入数据
在下一个屏幕上,我观察数据
@Query("SELECT * from RouteEntity")
fun getRoutesAsLiveData(): LiveData<List<RouteEntity>>
我如何“同步”似乎已在新屏幕显示后运行的插入触发观察到的实时数据?
答案 0 :(得分:1)
据我了解,您想在插入数据后立即导航到新屏幕,并且还希望观察数据库中新插入的数据。
插入是异步操作,您可能必须等待插入确认回调才能将用户带到新屏幕。
不幸的是,LiveData不支持对插入/删除/更新操作的回调响应。
根据Google文档(Source),LiveData支持不适用于一次写入/读取。 我建议使用长对象包装RxJava的Single。
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(routeEntity: RouteEntity): Single<Long>
其中Long返回所插入项目的rowId。 通过这种方法,当您从Single收到onSuccess()响应时,可以将用户带到新屏幕。