Android Room:同步查询返回null

时间:2017-11-04 15:06:18

标签: android kotlin android-room

我有一个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()

这不是:

{{1}}

没关系我使用 Repository 而不是 ViewModel ,只是一个例子。

知道为什么吗?

1 个答案:

答案 0 :(得分:3)

默认情况下,会议室不允许同步查询。

要实现这一点,您必须在初始化数据库时明确调用allowMainThreadQueries

这是以这种方式设计的,因为数据库选择应该观察变化并立即获取。