Frage Setzen Sie den Wert auf ein Realm-Objekt


Ich habe folgende Klasse

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

// getters and setters here

}

Dann versuche ich einen Wert auf ein bereits erstelltes Schülerobjekt zu setzen

student.setStudentName("Peter");

Dann bekomme ich folgenden Fehler

java.lang.IllegalStateException: Änderbarer Methodenaufruf während des Lesens   Transaktion.

Um dies zu überwinden, muss ich es wie folgt tun

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

Ich möchte diese Änderung in der Datenbank nicht beibehalten. Wie kann ich einfach einen Wert auf eine Realm-Objektvariable setzen / ändern, ohne ihn immer in der Datenbank zu belassen?


12
2018-03-23 23:32


Ursprung


Antworten:


Wenn Sie das Objekt nicht dauerhaft ändern möchten, benötigen Sie eine nicht verwaltete Kopie.

Sie können eine Kopie mit erstellen realm.copyFromRealm(RealmObject realmObject); Methode.


5
2017-08-05 13:29



Wenn Sie verwenden Realm.createObject()Das Objekt wird dem Realm hinzugefügt und funktioniert nur innerhalb einer Schreibtransaktion. Sie können eine Transaktion stornieren und dadurch das Objekt verwerfen.

Darüber hinaus können Sie Ihre Modellklasse als eigenständige Klasse verwenden und Objekte im Speicher erstellen (siehe http://realm.io/docs/java/0.80.0/#creating-objects für Details). Wenn Sie die Objekte beibehalten möchten, können Sie das verwenden Realm.copyToRealm() Methode.


4
2018-03-24 00:05



U könnte ein neues Model erstellen. Und das neue Modell sollte implementiert werden RealmModel.

public class StudentRM extends RealmModel{
private int studentID;
private String studentName;

// Constructors here
// getters and setters here

}

Jetzt kann ich das tun.

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"

1
2017-07-16 08:36



Sie können verwenden realm.cancelTransaction();, Anstatt von realm.commitTransaction();


0
2017-08-05 13:18