Realm-Android:字段值和字段getter值不一样

时间:2017-04-26 10:58:32

标签: android realm

public class MessageBean extends RealmObject {

    @PrimaryKey
    private String id;

    private int read;

    public int getRead() {
        return read;
    }

    public void setRead(int read) {
        this.read = read;
    }
}

吸气剂

Field Getter Value debug Image

字段 Field Value debug image

1 个答案:

答案 0 :(得分:3)

我认为您的案例中的直接字段访问目前尚未转换。

如果您更改当前代码,您将获得正确的结果:

realm.where(MessageBean.class)
     .equalTo("userId", PreferenceUtils.getUserId(UIUtils.getContext()))
     .or()
     .equalTo("userId", PreferenceUtils.STRING_DEFAULT)
     .equalTo("type", PushType.PERSONAL_ACTIVITY)
     .or()
     .equalTo("type", PushType.ARTICLE)
     .equalTo("read", 0)
     .findAll()
     .get(0)
     .read

RealmResults<MessageBean> results = realm.where(MessageBean.class)
     .beginGroup()
     .equalTo("userId", PreferenceUtils.getUserId(UIUtils.getContext()))
     .endGroup()
     .or()
     .beginGroup()
     .equalTo("userId", PreferenceUtils.STRING_DEFAULT)
     .equalTo("type", PushType.PERSONAL_ACTIVITY)
     .endGroup()
     .or()
     .beginGroup()
     .equalTo("type", PushType.ARTICLE)
     .equalTo("read", 0)
     .endGroup()
     .findAll();
 MessageBean message = results.get(0);
 int result = message.read; // <-- will return proper value

因此,您应首先将results.get(0)存储到本地变量中,这样Realm-Transformer就能检测到它。 (虽然公平地说,我认为即使没有这个技巧也应该工作)。

如果使用Accessor方法,那么即使没有运行这行代码的Realm-Transformer,它也会使用代理访问器。

关键是在调试器中检查获取的值,而不是对象本身的字段值。