在我的Android应用程序中,我将锻炼对象坚持到领域。在我的一个活动中,我使用以下代码创建了一个对象:
realm.beginTransaction();
Workout w = realm.createObject(Workout.class);
w.setmWorkoutId(UUID.randomUUID().toString());
realm.commitTransaction();
这是我的锻炼课程:
public class Workout extends RealmObject
{
private String mWorkoutId;
private int restSecsLeft;
private boolean prevSetOver = true;
private boolean workoutOver = false;
public Workout()
{
}
public String getmWorkoutId() {
return mWorkoutId;
}
public void setmWorkoutId(String mWorkoutId) {
this.mWorkoutId = mWorkoutId;
}
public int getRestSecsLeft() {
return restSecsLeft;
}
public void setRestSecsLeft(int restSecsLeft) {
this.restSecsLeft = restSecsLeft;
}
public boolean getPrevSetOver() {
return prevSetOver;
}
public void setPrevSetOver(boolean prevSetOver) {
this.prevSetOver = prevSetOver;
}
public boolean getWorkoutOver() {
return workoutOver;
}
public void setWorkoutOver(boolean workoutOver) {
this.workoutOver = workoutOver;
}
}
我有一个在创建锻炼后运行的服务,并且在调试奇怪的行为之后,找到了一个实例,其值为" prevSetOver"在锻炼中保存的RealmObject与从w.getPrevSetOver()返回的值不同。我不确定这是怎么回事 - 在实例化对象后,我不会更改变量prevSetOver的值。我是一个新的领域用户,不明白这是怎么回事。我附上的图片是w.prevSetOver()方法和具有不同值的RealmObject的屏幕截图。
此屏幕中的调试器中有更多变量,为了简单起见,我将大部分变量留在了我的帖子中。
答案 0 :(得分:2)
这是Realm的正确行为。
Realm生成代理对象,在编译时继承自Workout
。从Realm读取/写入数据实际上是由代理对象通过覆盖getter / setter实现的。 Realm不会更改原始Object的成员字段。
当调用Realm.createObject()
时,它会返回一个Proxy对象,其成员字段不是您所期望的。
您仍然可以通过调用Workout w = new Workout()
来创建原始模型对象的实例,我们将其称为独立对象(意味着它不由Realm管理)。这将像普通的Java对象一样运行。您仍然可以通过调用w = realm.copyToRealmOrUpdate(w)
将其复制到Realm。请注意,我们将w
的值更改为返回值。该函数将返回一个由Realm管理的Proxy对象。
答案 1 :(得分:0)
realm.beginTransaction();
Workout w = realm.createObject(Workout.class);
w.setmWorkoutId(UUID.randomUUID().toString());
realm.copyToRealm(w); //<-- u need
realm.commitTransaction();
最好添加Primarykey,将String
变量更改为long
@PrimaryKey
private long mWorkoutId;