android - 创建房间数据库对象的最佳方法
问题描述
我是 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"
}
]
}
]
}
解决方案
我不知道这是否是最好的方法,但通常当我在 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 中)转换为结构化对象(POJO 类)。就像是:
@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。
希望这会有所帮助,祝你好运!
推荐阅读
- python - 是否可以在 AWS Lambda 函数之间共享一段代码?
- android - 我无法在 android studio 中安装插件
- mobile - 如何使页面的背景半透明以在 Flutter 中显示上一个屏幕?
- asp.net-core-2.0 - Jwt 认证:JwtTokenBuilder
- javascript - 有条件地渲染兄弟组件
- kubernetes - EKS - 节点标签
- html - 仅限 CSS:onHover,更改所有具有 X 类的 div 的样式?
- c# - 在单击事件上执行 TreeView 到另一个单击事件中
- oracle - Oracle 12c RAC:一一启动/停止 SCAN Listener
- c++ - RapidJSON/C++:创建对象/数组的更好方法?