Отделить RealmObject от Realm/Convert управляемого RealmObject до неуправляемого объекта
Я хочу "отсоединить" RealmObject
от Realm
, что означает, что я хочу вернуть RealmObject
из метода и иметь возможность использовать его после я close
Realm
экземпляр.
Что-то вроде этого:
public Person getPersonWithId(final Context context, final String personId){
Realm realm = Realm.getInstance(context);
Person person = realm.where.....;
realm.close();
return person;
}
В настоящее время getPersonWithId(mContext, personId).getName()
вернет ошибку, как и ожидалось.
Наличие управляемого объекта также означает, что объект является неизменным (не может быть изменен), и поэтому любой метод, обновляющий объект, такой как person.setName(String name)
, завершится сбоем из-за того, что объект является управляемым объектом.
Я бы хотел, чтобы был такой метод, как Person person = person.detachFromRealm();
Кто-нибудь знает решение/обходной путь для этой проблемы?
Ответы
Ответ 1
Android realm теперь поддерживает привязку и удаление объекта realm. Таким образом, вы можете сделать следующее:
RealmObject objectCopy = realm.copyFromRealm(RealmObject object);
Вот подробности из документации:
Экземпляры объектов Realm могут быть либо управляемыми, либо неуправляемыми.
Управляемые объекты сохраняются в Realm, всегда обновляются и поток ограничен. Они, как правило, более легкие, чем неуправляемая версия, поскольку они занимают меньше места на куче Java.
Неуправляемые объекты похожи на обычные объекты Java, они не являются сохраняются, и они не будут обновляться автоматически. Они могут быть свободно перемещается по потокам.
Можно преобразовать между двумя состояниями, используя Realm.copyToRealm() и Realm.copyFromRealm()
Ответ 2
Здесь есть запрос функции здесь. Для этого нет реального отличного решения, только обходные пути.
A обходной путь - это вручную копировать данные с одного объекта на другой. У моего RealmObjects
есть тонны полей, поэтому вручную копирование свойств из одного объекта в другое является НЕТ GO.
Вместо того, чтобы вручную писать "код копирования", я решил использовать MapStruct. Здесь sandbox проект с Realm и MapStruct. Кажется, что все работает отлично, по крайней мере, для простых моделей.