android - 房间无法弄清楚如何将此字段保存到数据库中
问题描述
我需要你的帮助。我尝试在不反序列化的情况下找到解决方案,但我什么也没找到。如果您能帮助我,那就太好了...所以我有以下 JSON 文件
"resources": [{
"id": 441988,
"name": "TVA",
"parent": {
"id": 159
},
},
{
"id": 441900,
"name": "Marketing",
"parent": {
"id": 166
},
}]
我使用 ROOM 创建了一个数据库,它可以工作,但我有一个问题,它无法保存“父对象的 id”
这是我的以下代码:
@Entity(tableName = "resources")
class CategoryBean {
@PrimaryKey
@ColumnInfo(name = "resource_id")
@SerializedName("id")
private var mId: Int = 0
@ColumnInfo(name = "name")
@SerializedName("name")
private var mName: String? = null
@ColumnInfo(name = "parent")
@SerializedName("parent")
private var mParent: ParentBean? = null
fun getId(): Int {
return mId
}
fun getName(): String? {
return mName
}
fun getParent(): ParentBean? {
return mParent
}
fun setParent(parent: ParentBean) {
mParent = parent
}
fun setId(id: Int) {
mId = id
}
fun setName(name: String) {
mName = name
}
在这里你可以找到我的 ParentBean 文件
class ParentBean {
@SerializedName("id")
private var mId: Int = 0
fun getId(): Int? {
return mId
}
}
我找到了一些列表的解决方案,但不是子对象。
感谢您的时间和帮助。
我有以下错误:
Cannot figure out how to save this field into database. You can consider adding a type converter for it.
解决方案
Room 在 SQLite 数据库之上工作,当您@Entity
在创建表时注释类时,该表的列是根据类的属性定义的,因此您不能直接存储自定义类型,如ParentBean
,要做到这一点,您需要将属性注释mParent
为@Embedded
:
@Entity(tableName = "resources")
class CategoryBean constructor(
@PrimaryKey
@ColumnInfo(name = "resource_id")
@SerializedName("id")
var mId: Int,
@ColumnInfo(name = "name")
@SerializedName("name")
var mName: String?,
@SerializedName("parent")
@Embedded
var mParent: ParentBean?
)
然后为 中的属性定义一个列名ParentBean
:
data class ParentBean constructor(@SerializedName("id") @ColumnInfo(name = "parent_id")var mId: Int)
资源表将具有以下列:resource_id
, name
,parent_id
来源:https ://developer.android.com/training/data-storage/room/defining-data
注意:您不需要在 Kotlin 中手动定义 getter 和 setter。
推荐阅读
- reactjs - 如何在使用反应测试库单击父组件上的按钮后测试子组件呈现文本?
- c# - 如何在更新中每次使用 foreach 循环一次,并且每次都使用 bool 标志?
- java - 用 spock 嘲笑的价值观不会延续到 Kotlin 吗?
- python - 使用 groupby 的 SimpleImputer
- mysql - 如何将对象数组插入 MariaDB 数据库
- python - mpirun 在一定数量的进程上崩溃
- javascript - 尝试使用 pm2 启动 node.js 应用程序时出错:
- scroll - Sulu:如何用智能内容实现“加载更多”按钮?
- bash - bash shell 中的 for 循环中的“&”
- android - 在模块中发现重复的类 com.google.android.gms.internal.firebase_messaging.zza