2016-11-30 69 views
2

我很开心地在我的开发中的Android应用程序中使用领域Java。我从服务器API接收到JSONObject阵列,并且领域通过主领域实例对象上方便的createOrUpdateAllFromJson尽职尽责地获取它们。Realm createOrUpdateAllFromJson创建RealmModel对象而不会持续?

这种情况的典型流程是这样的:

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

不过,我现在碰到一个情况,我想没有建立一个临时的,在内存阵列相同MyCoolModel对象的实际上将它们保存到Realm中,因为我想在特定用例完成后尽快将它们丢弃。它在我看来像createOrUpdateAllFromJson和它的兄弟方法只在主领域实例对象上可用。

有没有什么办法可以利用这个方便的JSON来创建对象模型,还是我必须编写一个备用的实现和手动/自动JSON解析?

回答

0

我最终使用的“在存储领域”功能领域。我写了一个简单的函数,将返回一个新的内存领域实例,以新的UUID作为名称:

public Realm unpersistedRealm(){ 
    RealmConfiguration myConfig = new RealmConfiguration.Builder() 
      .name(UUID.randomUUID().toString()) 
      .inMemory() 
      .build(); 
    return Realm.getInstance(myConfig); 
} 

我用这个作为一个单独创建的实例只是扔掉的数据的目的。我使用正常的inMemoryRealmInstance.createOrUpdateAllFromJson()调用创建对象,并在完成时关闭内存实例。我在我的片段onCreateView()调用期间创建实例,并关闭onDestroyView()中的领域。

继续使用领域(尽管是在内存中的实例)给了我以下独特的优势:

  • 在内置的重复数据删除使用@PrimaryKey我MyCoolModel重点领域。如果我要使用我之前想到的手册ArrayList<MyCoolModel>的方法,那么我必须手动去重复,并且担心Realm已经为我解决的其他问题。
  • 基于查询的排序,过滤等
1

如果你想要JSON结构中的内存对象,你应该看看像GSON,Jackson或Moshi这样的标准JSON解析器。领域没有任何内置的方式来做到这一点。

+0

我也这么认为,但感谢您的确认。 –

+0

关于使用In Memory Realm特性的解决方案有什么想法?这与使用ArrayList相比如何呢? –

1

一个可笑的哈克的解决办法是

realm.beginTransaction(); 
realm.createOrUpdateAllFromJson(MyCoolModel.class,jsonObjArrs); 
List<MyCoolModel> list = realm.copyFromRealm(realm.where(MyCoolModel.class)).findAll()); 
realm.cancelTransaction(); 
return list; 

但你用LoganSquare(或GSON /莫西/等)更好