2016-11-30 5 views
2

Я использую realm Java в своем приложении для Android-приложений довольно счастливо. Я получаю JSONObject массивы из API-интерфейса сервера, и realm dutifully поглощает их через удобный createOrUpdateAllFromJson на объекте экземпляра основного объекта.Realm createOrUpdateAllFromJson для создания объектов RealmModel без сохранения?

Типичный поток для этого выглядит следующим образом:

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

Однако, у меня теперь работают в ситуации, где я хотел бы создать временный, в памяти массив тех же MyCoolModel объектов без фактически сохраняя их в Царстве, потому что я хочу выбросить их, как только будет определен конкретный вариант использования. Мне кажется, что это createOrUpdateAllFromJson, и его родственные методы доступны только в объекте экземпляра основного царства.

Есть ли способ использовать этот удобный JSON создателю объектной модели, или мне нужно написать альтернативную реализацию с ручным/автоматизированным разбором JSON?

ответ

0

Я закончил с использованием "В Realm памяти" особенность область. Я написал простую функцию, которая будет возвращать новый экземпляр области действия в оперативной памяти, с новым 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, вам следует посмотреть на стандартный парсер JSON, такой как GSON, Jackson или Moshi. В царстве нет встроенного способа сделать это.

+0

Я тоже так думал, но спасибо за подтверждение. –

+0

Любые мысли о моем решении использовать функцию In Memory Realm? Как это сравнится с использованием ArrayList? –

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/и т.д.)

Смежные вопросы