android - 创建房间数据库对象的最佳方法

标签 android android-room

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

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

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

如果有人可以向我展示并解释从下面的示例数据创建房间的最佳方法,我将不胜感激。我知道有很多关于简单 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"
                }
            ]
        }
    ]
}

最佳答案

我不知道这是否是最好的方法,但通常当我在 Room 中有复杂的对象时,我会定义一个包含两个 TypeConverters 的转换器类。第一个将结构化对象(您的 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 注释通过 Converter 来注释 AppDatabase 类(扩展 RoomDatabase 的类)。 这里有一篇关于这种方法的好文章 https://medium.com/@toddcookevt/android-room-storing-lists-of-objects-766cca57e3f9 .

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

关于android - 创建房间数据库对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071908/

相关文章:

Android 和 Paypal API 集成

java - 单击按钮后应用程序停止工作

android - 在 Retrofit + RxJava2 + Room 上处理网络错误

java - 如何在Fragments中设置RecyclerView OnClickListener?

android - 房间数据库迁移没有正确处理转换

android - 如何在 SENCHA TOUCH 中使用 SOAP 网络服务?

android - 如何只获取从 Parse 插入的新数据

android - 房间 : Renaming Table doesn't update Foreign Key Table Reference

Android房间数据库: get autogenerated id at time of assignment

java - addView 添加 View 但没有显示它