如何将以下 json 插入房间持久性?

Posted

技术标签:

【中文标题】如何将以下 json 插入房间持久性?【英文标题】:How can I insert the following json into room persistence? 【发布时间】:2020-11-29 10:43:12 【问题描述】:

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
)

【问题讨论】:

【参考方案1】:

在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 在数据库类中插入这些项目,或者在使用 KEY_FIRST_START 的 Activity 中插入这些项目,以便仅用你的项目填充一次

【讨论】:

我得到了这个列表,但它并没有解决我的问题,我的想法是能够在房间里制作相同的模型:([InvoiceItems(quantitiy=3, item=Item(id=1, name=Huevos Frescampo X30, description=Huevo Rojo A Insuperable, 30 Unidad(es). 1032680, price=8950, img_url=null, createdAt=2020-08-08T20:13:33, updatedAt=2020-08-08T20:13:33)), InvoiceItems(quantitiy=2, item=Item(id=2, name=Banano Criollo, description=Banano Criollo, price=630, img_url=null, createdAt=2020-08-08T20:13:33, updatedAt=2020-08-08T20:13:33))] 2020-08-09 由于我必须插入,获取,遵循json对象的相同模型,问题正是在关联房间中的实体

以上是关于如何将以下 json 插入房间持久性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在房间持久性库中使用外键

房间持久性:错误:实体和 Pojos 必须有一个可用的公共构造函数

插入房间后的行

房间持久性库 - 带有 List<Video> 的嵌套对象,@Embedded 不起作用。

如何使主键作为房间持久性库的自动增量

房间持久性库。删除所有