安卓房间 : Synchronous queries return null

标签 android kotlin android-room

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

不要介意我使用的是 Repository 而不是 ViewModel,这只是一个示例。

知道为什么吗?

最佳答案

Room 默认不允许同步查询。

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

之所以这样设计,是因为数据库选择应该观察变化,而不是立即获取。

关于安卓房间 : Synchronous queries return null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112114/

相关文章:

java - android VM 所需的内存超出驱动程序限制

android - 如何在 Android jetpack Compose 中设置默认焦点项目

android - 无法解析符号 RoomDatabase

android - 如何在有空间的情况下执行繁重的数据库操作?

java - 如何在 Android 中将 PictureDrawable 保存为 JPEG/PNG 文件

android - 在另一个 View 之上绘制 View

java - Android - 将两个数据库中的数据提取到一个游标中

kotlin - 检查列表列表是否具有重复元素的功能方法

首次更新后 Android LiveData Observer 未激活

android - 在类 RoomOpenHelper 中构建 Android 房间数据库时出错