我非常高兴地在开发中的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解析来编写替代实现?
答案 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已经为我解决的其他问题。