android - android -room - 在房间数据库中保存对象
问题描述
我有这个 json :
{
"products": [{
"id": "150",
"num": "7",
"name": "450 SA"
}, {
"id": "122",
"num": "13",
"name": "Gillette Blue"
}]}
我用它创建了我的模型,我有这些类:
@Entity
data class ProductsModel(
@Json(name = "products")
val products: List<Product>
)
@Entity
data class Product(
@PrimaryKey(autoGenerate = false)
val id: String,
@Json(name = "name")
val name: String,
@Json(name = "num")
val num: String,
)
这是我的 DAO 类,用于将数据插入我的房间数据库:
@Dao
interface ProductsDAO {
// 2: Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(product: ProductsModel)
当我想运行应用程序时,我收到此错误:
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
如何将这些数据保存到我的数据库中?
解决方案
Room 提供了在原始类型和盒装类型之间进行转换的功能,但不允许实体之间的对象引用。
您可以简单地创建一个包含 3 列的表 - id、name 和 num。所以每一行都会不同Product
或者
您的数据库应该只保存Product
's 的列表,并且您应该提供一个TypeConverter
,它将Product
类与 Room 可以保留的已知类型相互转换。
有关类型转换器的更多信息 -链接
推荐阅读
- javascript - 如何计算没有突变的数组中值的出现次数
- r - nls 引导错误必须具有正长度
- oracle - SQL Loader 加载十进制负数的问题
- powershell - 如何使用 windows CMD 命令获取所有带有浏览日期的浏览数据?
- python - Python在多个excel中搜索对应数据并粘贴到新的excel工作表中
- javascript - DIV 出现在向上滚动控制位置
- webgl - 图元的Regl颜色和alpha混合
- centos - 我搞砸了我的 bash 配置,但我不确定如何
- r - 在 R 中自定义 LSTM 的初始化器
- bash - 用于检查服务器是否已启动的 Shell 脚本