首页 > 解决方案 > 如何将以下 json 插入房间持久性?

问题描述

在 Android 上使用 Room 库时,我发现自己处于以下情况,我正在尝试创建一个商店,但我需要插入金额和相应的项目。但是我不知道如何在房间中保存以下json格式,非常感谢您的帮助

[{
    "id": 1,
    "quantitiy": 3,
    "item": {
        "id": 1,
        "name": "Huevos Frescampo X30",
        "description": "Huevo Rojo A Insuperable, 30 Unidad(es). 1032680",
        "price": 8950,
        "createdAt": "2020-08-08T20:13:33",
        "updatedAt": "2020-08-08T20:13:33"
    }
}, {
    "id": 2,
    "quantitiy": 2,
    "item": {
        "id": 2,
        "name": "Banano Criollo",
        "description": "Banano Criollo",
        "price": 630,
        "createdAt": "2020-08-08T20:13:33",
        "updatedAt": "2020-08-08T20:13:33"
    }
}]
@Entity(tableName = "cart")
data class Cart (
        @PrimaryKey
        val id: Long,
        val quantitiy: Long,
        val item: ItemC
)

@Entity(tableName = "item")
data class ItemC (
        val id: Long,
        val name: String,
        val description: String,
        val price: Long,
        val createdAt: String,
        val updatedAt: String
)

标签: androidjsonsqliteandroid-roomlocal-database

解决方案


在 assets 文件夹中创建一个 json 文件

class MockItemFactory constructor(
 
    private val application: Application
) {

companion object {
    const val KEY_FIRST_START = "FIRST_START"
}


    fun generateMockList(): List<Cart> {
        val response = application.assets.readAssetsFile("response.json")
        return GsonBuilder().create().fromJson(response, Array<Cart>::class.java).asList()
    }
    
    private fun AssetManager.readAssetsFile(fileName: String): String =
        open(fileName).bufferedReader().use { it.readText() }

}

dao并在创建数据库类时使用您在数据库类中插入这些项目,或者在 Activity 中使用KEY_FIRST_START您的项目仅填充一次


推荐阅读