首页 > 解决方案 > 创建房间数据库对象的最佳方法

问题描述

我是 Android 房间持久性库的新手。我查看了很多与 Room 相关的教程。但有些事情还不清楚。

我可以将我的问题与以下回复联系起来。如果我们在“信息”中使用@Embedded,是否可以将信息 POJO 类声明为单独的实体?因为内部信息我有另一个名为“首选项”的对象。我怎样才能将它嵌入到我的房间数据库中?

接下来是如何在下面的示例中将 Awb ArrayList 用于类型转换器?请注意,在 Awb ArrayList 内部还有一个“术语”数组。

如果有人能向我展示和解释从以下示例数据创建房间的最佳方法,我将不胜感激。我知道有很多关于简单 JSON 结构的教程,但是我没有找到任何带有嵌套 JsonObjects 的示例。

{
    "hashCode": 10461,
    "jobs": [
        {
            "info": {
                "jobDesc": "aaaaa",
                 "signatureRequired": "true”
                "preferences": {
                    "podRequired": 0,
                    "eligableForCcod": false,
                    "signatureRequired": 1
                }
            },
            "awb": [
                {
                    "terms": [
                        {
                            "termValue": "INR1500.000",
                            "termType": "CASH_AMOUNT"
                        },
                        {
                            "termValue": "CTLDk",
                            "termType": "CX_EN"
                        }
                    ],
                    "packagesCount": 1,
                    "accountId": "AE _MP",
                    "awb": "1234567878440"
                }
            ]
        }
    ]
}

标签: androidandroid-room

解决方案


我不知道这是否是最好的方法,但通常当我在 Room 中有复杂的对象时,我会定义一个包含两个 TypeConverter 的转换器类。第一个从结构化对象(您的 POJO 类)转换为带有 GSON 库的字符串,例如:

@TypeConverter
    public String fromPojoToString(MyPojoClass info) {
        if (info == null) {
            return (null);
        }
        Gson gson = new Gson();
        Type type = new TypeToken<MyPojoClass>() {

        }.getType();
        return gson.toJson(info, type);
    }

第二个转换器将字符串(存储在 Room 中)转换为结构化对象(PO​​JO 类)。就像是:

@TypeConverter
    public MyPojoClass fromStringtoPojo(String object) {
        if (object == null) {
            return (null);
        }
        Gson gson = new Gson();
        Type type = new TypeToken<MyPojoClass>() {
        }.getType();
        return gson.fromJson(info, type);
    }

这样您就可以序列化/反序列化您的 POJO 类,而无需编写大量样板文件。显然,您必须使用 @TypeConverters 注释使用您的转换器注释您的 AppDatabase 类(扩展 RoomDatabase 的类)。这里有一篇关于这种方法的好文章https://medium.com/@toddcookevt/android-room-storing-lists-of-objects-766cca57e3f9

希望这会有所帮助,祝你好运!


推荐阅读