android -room-在房间数据库中保存对象

问题描述 投票:0回答:1

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

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

android android-room android-livedata
1个回答
0
投票

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

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

OR

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

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

© www.soinside.com 2019 - 2024. All rights reserved.