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 已经为我解决的其他问题。
  • 基于查询的排序、过滤等