【问题标题】:Kotlin : Read databse using LiveData Show me empty RecycleViewKotlin:使用 LiveData 读取数据库显示空的 RecyclerView
【发布时间】:2020-10-20 15:45:28
【问题描述】:

我在 Kotlin 的项目中使用 Room 数据库、LiveData 和 ViewModel。我有我之前创建的 Prepopulate 数据库。我的目标是使用 Room 读取此数据库并将数据库中的数据显示到回收视图中。 所以我在资产文件夹中复制数据库并使用.createFromAsset 方法。当我在路径data/data/packagename.my 中运行项目数据库复制时,我的问题是当我运行项目时,它在我的 recycleveiw 中什么都没有显示。我检查了几次代码并看到了很多示例,但每次它都显示空的recycleview并且从不显示我的数据库信息。我真的很困惑,找不到我的问题。你能告诉我我哪里错了吗?谢谢你。这是我的代码:

Recycleview 适配器:

       override fun onBindViewHolder(holder: RoomViewHolder, position: Int) {
    if(holder is RoomViewHolder) {
        val current = entitys[position]
     
        holder.placeNameTextView.text = current.name
    }
}

internal fun setentitiys(entitis: List<Detail_Entity>) {
    this.entitys = entitys
    notifyDataSetChanged()
}

override fun getItemCount() = entitys.size

inner class RoomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var placeNameTextView: TextView = itemView.placeNameTextView

}

【问题讨论】:

  • 看来你走在了正确的轨道上。您确定表中有数据吗?你能检查一下数据库检查员吗?
  • @MD 是的。当我将数据库从模拟器存储中的数据/数据/包名称复制到我的电脑并使用数据库检查器打开时,我看到了我的表,里面有我的所有数据。

标签: android kotlin


【解决方案1】:

Room_Adapter

internal fun setentitiys(entitis: List<Detail_Entity>) {
    this.entitys = entitis //Notice this !!
    notifyDataSetChanged()
}

实体类

  • 设置主键:@PrimaryKey。这是必需的。
  • 您在 Detail_Dao 中使用了表名“my_table”。所以添加@Entity(tableName = "my_table")

【讨论】:

  • 我的实体和dao类没问题。它刚刚从复制/粘贴中离开。所以你说“如果你想观察它,请在 LiveData 列表中添加新的 Entity_detail 对象”。我该怎么做?
  • 不,你不需要这样做。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 2019-05-24
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多