Ответ 1
Если вы хотите изменить объект в ненастроенной форме, вам нужна неуправляемая копия.
Вы можете создать копию, используя метод realm.copyFromRealm(RealmObject realmObject);
.
У меня есть следующий класс
public class Student extends RealmObject{
private int studentID;
private String studentName;
// getters and setters here
}
Затем я пытаюсь установить значение уже созданному объекту-ученику
student.setStudentName("Peter");
Затем я получаю следующую ошибку
java.lang.IllegalStateException: вызов метода Mutable во время чтения сделка.
Чтобы преодолеть это, я должен сделать это следующим образом
Realm realm = Realm.getInstance(this);
realm.beginTransaction();
student.setStudentName("Peter");
realm.commitTransaction();
Я не хочу сохранять это изменение в базе данных. Как я могу просто задать/изменить значение для переменной объекта realm, не сохраняя ее всегда в базе данных?
Если вы хотите изменить объект в ненастроенной форме, вам нужна неуправляемая копия.
Вы можете создать копию, используя метод realm.copyFromRealm(RealmObject realmObject);
.
Когда вы используете Realm.createObject()
, объект добавляется в Realm, и он работает только в транзакции записи. Вы можете отменить транзакцию и тем самым отказаться от объекта.
Кроме того, вы можете использовать свой класс модели как самостоятельный класс и создавать объекты в памяти (подробнее см. http://realm.io/docs/java/0.80.0/#creating-objects). Если вам нужно сохранить объекты, вы можете использовать метод Realm.copyToRealm()
.
Возможно, вы захотите создать новую модель. И ваша новая модель должна реализовывать RealmModel
.
public class StudentRM extends RealmModel{
private int studentID;
private String studentName;
// Constructors here
// getters and setters here
}
Теперь вы можете сделать это.
studentRm.setStudentName("Peter"); //Setting Vale Or
studentRm.addAll(student); //Add all value from DB
studentRm.setStudentName("Jhon"); //It won't change DB anymore
studentRm.getStudentName(); // "Jhon"
Вы можете использовать realm.cancelTransaction();
вместо realm.commitTransaction();