【发布时间】:2018-05-03 13:40:00
【问题描述】:
我读过在房间数据库中查询数据的一种方法是使用 Livedata,它可以在主线程上使用,因为它是异步的。
我想使用 LiveData 而不是 RxJava 或 AsyncTask。
为此,在我的存储库类中,我有函数 getSomeData() 返回 LiveData>,我在 viewModel 构造函数中调用此函数:
private var mObservableSomeData: LiveData<List<SomeData>>
init {
mObservableSomeData = repository.getSomeData()
}
fun getSomeData(): LiveData<List<SomeData>> {
return mObservableSomeData
}
但是它崩溃说:
无法访问主线程上的数据库,因为它可能会长时间锁定 UI。
我该怎么办?
【问题讨论】:
-
在您的 Dao 类中,您是否也将查询的返回类型包装在 LiveData 中?
-
这就是我所做的:@Query("SELECT * FROM somedata") fun loadAllData(): LiveData
- >
-
错误到底指向哪一行?你也有插入查询吗?
-
是的,我也有插入,是的,你可能是对的,是插入导致崩溃
-
是的,使用像 codelab 这样的 AsyncTask,不过它是在 Java 中的 :)
标签: android observable android-room android-architecture-components android-livedata