将值设置为领域对象

时间:2015-03-23 23:32:02

标签: android realm

我有以下课程

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();

我不想在数据库中保留此更改。如何在不将数据库持久保存到数据库的情况下,将值设置/更改为域对象变量?

4 个答案:

答案 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();