我有一个Site
以及相应的SiteDao
:
@Dao
interface SiteDao {
@get:Query("SELECT * FROM site WHERE uid = 1 LIMIT 1")
val site: LiveData<Site>
@get:Query("SELECT * FROM site WHERE uid = 1 LIMIT 1")
val getSiteSync: Site
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(context: Site)
}
这有效:
siteRepository.getSite().observe(activity, Observer<Site> {
// `it` is instance of Site, working as intended
})
这不会:
Thread {
val site = siteRepository.getSiteSync()
// site is null
}.start()
别介意我正在使用存储库代替视图模型,只是一个例子。
知道为什么吗?
Room 默认不允许同步查询。
要实现这一点,您必须显式调用允许主线程查询 https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder.html#allowMainThreadQueries()在初始化数据库时。
之所以这样设计,是因为数据库选择应该观察更改并且不会立即获取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)