如何使用ROOM Android保存嵌套的json响应?

时间:2019-07-03 18:06:06

标签: android-room android-architecture-components

我正在尝试使用ROOM数据库,并且具有如下所示的嵌套JSON,

{
    company_id: “”
    employees : [
        {
            employee_id: “”
            company_id: “”
            adresses: [
                {
                    address_id: “”
                    employee_id: “”
                },
                {
                    address_id: “”
                    employee_id: “”
                }
            ]
        },
        {
            employee_id: “”
            company_id: “”
            adresses: [
                {
                    address_id: “”
                    employee_id: “”
                },
                {
                    address_id: “”
                    employee_id: “”
                }
            ]
        }
    ]
}

我正在尝试使用ROOM保存Company对象。

我已经阅读了许多有关类似问题的文章和答案,但是对于实现这一点,我并没有获得令人满意的答案。 我知道@Embedded批注,如果Class具有可以嵌入到同一实体中的另一个类的对象,并且ROOM为嵌入的类创建其他列,该注释将很有用。 我也知道TypeConverters,它有助于保存其他对象列表。但是,如果该嵌套类具有另一个对象列表,例如在我的示例中Company有List而Employee有List怎么办? 如果我没有记错,我可以在这种情况下使用ForeignKey概念。但是我不确定是否要获取公司的数据,然后嵌套列表将与Company对象一起返回,还是我必须分别查询其他列表并将其添加到Company对象中,然后才能返回使用。

下面是我的类结构。

data class Company(
    //Other data…

    var employees : List<Employee>? = null
)


data class Employee(
    //Other data…

    var adresses : List<Address>? = null
)

data class Address(
    //Other data…
)

任何有关将此类数据保存到ROOM并将其取回的帮助都将受到赞赏。预先感谢。

编辑:已解决

我已经解决了我的问题,我将Typeconverters用于内部嵌套列表。而且我能够保存和检索整个父对象。感谢大家抽出时间来检查我的关心。以下是我的操作方式,

@Entity(tableName = "company_table")
data class Company(
    //Other data…

    @TypeConverters(EmployeeTypeConverter::class)
    var employees : List<Employee>? = null
)


data class Employee(
    //Other data…

    @TypeConverters(AddressTypeConverter::class)
    var adresses : List<Address>? = null
)

data class Address(
    //Other data…
)

注意:

请记住不要用@Entity注释Employee和Address类。

0 个答案:

没有答案