2

我很高兴在我正在开发的 Android 应用程序中使用领域 Java。我JSONObject从服务器 API 接收数组,领域尽职尽责地通过createOrUpdateAllFromJson主领域实例对象上的便利来摄取它们。

典型的流程如下所示:

// get API results into JSONArray jsonObjArrs variable
realm.beginTransaction();
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs);
realm.commitTransaction();

但是,我现在遇到了一种情况,我想创建一个临时的内存中相同MyCoolModel对象的数组,而不将它们实际保存到 Realm,因为我想在特定用例完成后立即将它们扔掉. 在我看来createOrUpdateAllFromJson,它的兄弟方法仅在主领域实例对象上可用。

有什么方法可以利用这种方便JSON的对象模型创建者,还是我必须编写一个带有手动/自动 JSON 解析的替代实现?

4

3 回答 3

1

一个可笑的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)

于 2016-12-01T14:09:24.227 回答
1

如果您想要来自 JSON 结构的内存对象,您应该查看标准的 JSON 解析器,如 GSON、Jackson 或 Moshi。Realm 没有任何内置的方法来做到这一点。

于 2016-12-01T08:46:57.103 回答
0

我最终使用了领域的“内存领域”功能。我编写了一个简单的函数,它将返回一个新的内存领域实例,并以新的 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 已经为我解决的其他问题。
  • 基于查询的排序、过滤等
于 2016-12-02T16:04:08.680 回答