android -room - сохранение объекта в базе данных комнаты - PullRequest
0 голосов
/ 15 октября 2019

У меня есть этот 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.

Как я могу сохранить эти данные в своей базе данных?

1 Ответ

1 голос
/ 15 октября 2019

Комната обеспечивает функциональность для преобразования между примитивным и коробочным типами, но не допускает ссылки на объекты между сущностями.

Вы можете просто создать таблицу с 3 столбцами - id, name и num. Таким образом, каждая строка будет отличаться Product

ИЛИ

Ваша база данных должна сохранять только список Product, и вы должны предоставить TypeConverter, который преобразует класс Product в известный тип, который может сохраняться в Room.

подробнее о преобразователях типов - link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...