我有以下课程
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();
我不想在数据库中保留此更改。如何在不将数据库持久保存到数据库的情况下,将值设置/更改为域对象变量?
答案 0 :(得分:5)
如果要以非持久方式修改对象,则需要非托管副本。
您可以使用realm.copyFromRealm(RealmObject realmObject);
方法创建副本。
答案 1 :(得分:4)
当您使用Realm.createObject()
时,该对象将添加到Realm中,并且它仅在写入事务中有效。您可以取消交易,从而丢弃该对象。
此外,您可以将模型类用作独立类并在内存中创建对象(有关详细信息,请参阅http://realm.io/docs/java/0.80.0/#creating-objects)。如果需要保留对象,可以使用Realm.copyToRealm()
方法。
答案 2 :(得分: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"
答案 3 :(得分:0)
您可以使用realm.cancelTransaction();
代替realm.commitTransaction();