【问题标题】:Set value to a realm object将值设置为领域对象
【发布时间】:2015-03-23 23:32:02
【问题描述】:

我有以下课程

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

我不想将此更改保留在数据库中。我怎样才能将一个值设置/更改为领域对象变量而不总是将其持久化到数据库中?

【问题讨论】:

    标签: android realm


    【解决方案1】:

    如果您想以非持久化方式修改对象,则需要它的非托管副本。

    您可以使用realm.copyFromRealm(RealmObject realmObject); 方法创建副本。

    【讨论】:

      【解决方案2】:

      当您使用Realm.createObject() 时,该对象被添加到领域并且它仅在写入事务中起作用。您可以取消交易,从而丢弃该对象。

      此外,您可以将模型类用作独立类并在内存中创建对象(有关详细信息,请参阅http://realm.io/docs/java/0.80.0/#creating-objects)。如果需要持久化对象,可以使用Realm.copyToRealm()方法。

      【讨论】:

        【解决方案3】:

        您可能想要创建一个新模型。你的新模型应该实现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"
        

        【讨论】:

          【解决方案4】:

          您可以使用realm.cancelTransaction();,而不是realm.commitTransaction();

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-26
            • 2021-05-29
            • 2015-02-27
            • 2013-12-07
            • 1970-01-01
            • 2022-01-07
            相关资源
            最近更新 更多