2017-04-26 24 views
0
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; 
    } 
} 

吸氣境界 - 安卓字段值和字段的getter價值是不一樣的

Field Getter Value debug Image

Field Value debug image

+0

你正在使用什麼版本的Realm? – EpicPandaForce

+0

版本是1.2.0 – chentao7v

+0

有趣的是,這個方法是在擴展RealmObject的類的構造函數中嗎? – EpicPandaForce

回答

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,它也會使用代理訪問器。

在調試器中,檢查獲取的值而不是對象本身的字段值是關鍵。

+0

謝謝,但它不起作用。 – chentao7v

+0

你確實有'即時運行'被禁用,對吧?如果這不是RealmObject的構造函數,那麼它應該與Realm 1.2.0一起使用。 – EpicPandaForce

+0

您需要確保您爲'result'的值添加了watcher,並且** not ** for message.read' – EpicPandaForce

相關問題