Realm createOrUpdateAllFromJson 在不持久化的情况下创建 RealmModel 对象?
Realm createOrUpdateAllFromJson to create RealmModel objects without persisting?
我正在开发中的 Android 应用程序中非常愉快地使用领域 Java。我从服务器 API 接收到 JSONObject
数组,领域通过主领域实例对象上方便的 createOrUpdateAllFromJson
尽职尽责地摄取它们。
典型的流程如下:
// get API results into JSONArray jsonObjArrs variable
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
realm.commitTransaction();
但是,我现在 运行 想创建一个临时的内存数组,其中包含相同的 MyCoolModel
个对象 而没有 实际上是将它们保存到 Realm 中,因为我想在特定用例完成后立即将它们丢弃。在我看来它像 createOrUpdateAllFromJson
并且它的同级方法仅在主领域实例对象上可用。
有没有什么方法可以利用这个方便的 JSON
来创建对象模型,或者我是否必须使用手动/自动 JSON 解析编写替代实现?
如果您想要来自 JSON 结构的内存中对象,您应该查看标准 JSON 解析器,如 GSON、Jackson 或 Moshi。 Realm 没有任何内置的方法来执行此操作。
一个荒谬的 hacky 解决方案是
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
List<MyCoolModel> list = realm.copyFromRealm(realm.where(MyCoolModel.class)).findAll());
realm.cancelTransaction();
return list;
但是你最好使用 LoganSquare(或 GSON/Moshi/etc)
我最终使用了领域的 "In memory Realm" 功能。我写了一个简单的函数,它将 return 一个新的内存中领域实例,使用一个新的 UUID 作为名称:
public Realm unpersistedRealm(){
RealmConfiguration myConfig = new RealmConfiguration.Builder()
.name(UUID.randomUUID().toString())
.inMemory()
.build();
return Realm.getInstance(myConfig);
}
我将其用作单独创建的实例,仅用于一次性数据目的。我使用正常的 inMemoryRealmInstance.createOrUpdateAllFromJson()
调用创建对象,并在完成后关闭内存中的实例。我在片段的 onCreateView()
调用期间创建实例并在 onDestroyView()
.
中关闭领域
继续使用领域(尽管是内存中的实例)给我以下明显的优势:
- 在我的
MyCoolModel
键字段上使用 @PrimaryKey 内置重复数据删除。如果我要使用我之前想到的手动 ArrayList<MyCoolModel>
方法,我将不得不手动删除重复数据,并担心 Realm 已经为我解决的其他问题。
- 基于查询的排序、过滤等
我正在开发中的 Android 应用程序中非常愉快地使用领域 Java。我从服务器 API 接收到 JSONObject
数组,领域通过主领域实例对象上方便的 createOrUpdateAllFromJson
尽职尽责地摄取它们。
典型的流程如下:
// get API results into JSONArray jsonObjArrs variable
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
realm.commitTransaction();
但是,我现在 运行 想创建一个临时的内存数组,其中包含相同的 MyCoolModel
个对象 而没有 实际上是将它们保存到 Realm 中,因为我想在特定用例完成后立即将它们丢弃。在我看来它像 createOrUpdateAllFromJson
并且它的同级方法仅在主领域实例对象上可用。
有没有什么方法可以利用这个方便的 JSON
来创建对象模型,或者我是否必须使用手动/自动 JSON 解析编写替代实现?
如果您想要来自 JSON 结构的内存中对象,您应该查看标准 JSON 解析器,如 GSON、Jackson 或 Moshi。 Realm 没有任何内置的方法来执行此操作。
一个荒谬的 hacky 解决方案是
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
List<MyCoolModel> list = realm.copyFromRealm(realm.where(MyCoolModel.class)).findAll());
realm.cancelTransaction();
return list;
但是你最好使用 LoganSquare(或 GSON/Moshi/etc)
我最终使用了领域的 "In memory Realm" 功能。我写了一个简单的函数,它将 return 一个新的内存中领域实例,使用一个新的 UUID 作为名称:
public Realm unpersistedRealm(){
RealmConfiguration myConfig = new RealmConfiguration.Builder()
.name(UUID.randomUUID().toString())
.inMemory()
.build();
return Realm.getInstance(myConfig);
}
我将其用作单独创建的实例,仅用于一次性数据目的。我使用正常的 inMemoryRealmInstance.createOrUpdateAllFromJson()
调用创建对象,并在完成后关闭内存中的实例。我在片段的 onCreateView()
调用期间创建实例并在 onDestroyView()
.
继续使用领域(尽管是内存中的实例)给我以下明显的优势:
- 在我的
MyCoolModel
键字段上使用 @PrimaryKey 内置重复数据删除。如果我要使用我之前想到的手动ArrayList<MyCoolModel>
方法,我将不得不手动删除重复数据,并担心 Realm 已经为我解决的其他问题。 - 基于查询的排序、过滤等