Realm createOrUpdateAllFromJson创建RealmModel对象而不持久化?

时间:2016-11-30 17:09:37

标签: java android json realm realm-java

我非常高兴地在开发中的Android应用程序中使用了realm 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解析来编写替代实现?

3 个答案:

答案 0 :(得分:1)

如果你想要来自JSON结构的内存中对象,你应该看看像GSON,Jackson或Moshi这样的标准JSON解析器。 Realm没有任何内置的方法。

答案 1 :(得分: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)

答案 2 :(得分:0)

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