2016-11-30 33 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 /莫西/等)更好