【问题标题】:Room Query not working房间查询不起作用
【发布时间】:2018-07-29 11:41:18
【问题描述】:

我正在尝试在我的项目中使用 RoomLiveData。在我的应用中,我有 authors 表。数据插入得很好,但是当我尝试从表中读取某些内容时,它没有给我记录。我还看到了带有 SQLite Opener 软件的数据库。它显示了所有数据。

下面是我的作者实体。

@Entity(tableName = "authors")
    data class AuthorModel(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id") val id: Long = 0,
    @ColumnInfo(name = "name") var name: String
)

这是我的 Author Dao 界面。

@Dao
interface AuthorDao {

    @Query(value = "SELECT * FROM authors")
    fun allAuthors(): LiveData<List<AuthorModel>>

    @Query(value = "SELECT * FROM authors WHERE id = :authorId")
    fun authorWithId(authorId: Long): LiveData<AuthorModel?>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(author: AuthorModel): Long

}

最后,这是我的 RoomDatabase 类。

@Database(entities = [AuthorModel::class], version = 1)
abstract class BookLibraryDatabase : RoomDatabase() {

abstract fun authorDao(): AuthorDao

}

感谢您的宝贵时间。

【问题讨论】:

  • 首先检查,你的db文件在/database/文件夹下吗?
  • @SaurabhKhare 是的,我的数据库存在于数据库文件夹中。就像,我上面说插入了数据但我无法读取数据。
  • 我也有同样的问题。我注意到 android 文件系统上的 Room 生成的 db 文件没有 .db 扩展名,而 SqlOpenHelper 生成的文件有。所以我猜这与 Room 生成 db 文件的方式有关。
  • 这与返回LiveData有关。尝试仅返回 List&lt;AuthorModel&gt;AuthorModel(未包含在 LiveData 中),看看您是否有同样的问题。我在我的应用程序中遇到了同样的问题,即返回 LiveData 不起作用,但返回底层数据结构可以。

标签: android android-room android-architecture-components android-livedata android-architecture


【解决方案1】:

您必须观察 LiveData。第一次获取时 livedata.value 将为空。

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多