【问题标题】:android -room - saving object in room databaseandroid -room - 在房间数据库中保存对象
【发布时间】:2019-10-15 09:05:49
【问题描述】:

我有这个 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.

如何将这些数据保存到我的数据库中?

【问题讨论】:

  • 你必须提供 ProductsDAO 的实现

标签: android android-room android-livedata


【解决方案1】:

Room 提供了在原始类型和盒装类型之间进行转换的功能,但不允许实体之间的对象引用。

您可以简单地创建一个包含 3 列的表 - id、name 和 num。所以每一行都是不同的Product

您的数据库应该只保存Product 的列表,并且您应该提供一个TypeConverter,它将Product 类与Room 可以持久存在的已知类型相互转换。

关于类型转换器的更多信息 - link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2021-10-22
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多