领域中的数据更改android

时间:2015-07-21 20:52:23

标签: android realm

在我的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的屏幕截图。

此屏幕中的调试器中有更多变量,为了简单起见,我将大部分变量留在了我的帖子中。

enter image description here

2 个答案:

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