Установить значение для объекта области

android realm

6236 просмотра

4 ответа

У меня следующий класс

public class Student extends RealmObject{
private int studentID;
private String studentName;

// getters and setters here

}

Затем я пытаюсь установить значение для уже созданного студенческого объекта

student.setStudentName("Peter");

Тогда я получаю следующую ошибку

java.lang.IllegalStateException: непостоянный вызов метода во время транзакции чтения.

Чтобы преодолеть это, я должен сделать это следующим образом

Realm realm = Realm.getInstance(this);
realm.beginTransaction();
student.setStudentName("Peter");
realm.commitTransaction();

Я не хочу сохранять это изменение в базе данных. Как я могу просто установить / изменить значение переменной объекта области, не всегда сохраняя его в базе данных?

Автор: ChaturaM Источник Размещён: 12.07.2019 08:33

Ответы (4)


5 плюса

Если вы хотите изменить объект непостоянным способом, вам нужна неуправляемая его копия.

Вы можете создать копию, используя realm.copyFromRealm(RealmObject realmObject);метод.

Автор: EpicPandaForce Размещён: 05.08.2016 01:29

4 плюса

Когда вы используете Realm.createObject(), объект добавляется в область, и он работает только в транзакции записи. Вы можете отменить транзакцию и тем самым отказаться от объекта.

Более того, вы можете использовать свой класс модели в качестве отдельного класса и создавать объекты в памяти (подробнее см. Http://realm.io/docs/java/0.80.0/#creating-objects ). Если вам нужно сохранить объекты, вы можете использовать Realm.copyToRealm()метод.

Автор: geisshirt Размещён: 24.03.2015 12:05

1 плюс

Возможно, вы захотите создать новую модель. И ваша новая модель должна реализовать 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"
Автор: Zugor Размещён: 16.07.2017 08:36

0 плюса

Вы можете использовать realm.cancelTransaction();вместоrealm.commitTransaction();

Автор: darksider Размещён: 05.08.2016 01:18
Вопросы из категории :
32x32