2016-07-20 9 views
3

Wenn das RealmObject von einem Ergebnis einen Wert hat, gibt es eine Möglichkeit, es zu erkennen?Überprüfen Sie, ob Änderungen am Realm-Objekt vorgenommen wurden

Account account = mRealmInstance.where(Account.class).equalTo("isLoggedIn", true).findFirst(); 

account.setName("New Name"); 

if(account.hasChanged()){ //Is there a realmMethod for this? 

} 
+1

Sie Zuhörer zum 'RealmObject' hinzufügen können, aber es wird aufgerufen, wenn sich die db ändert, ändert sich nicht nur das 'RealmObject'. Eine genauere Implementierung wird später kommen, siehe https://github.com/realm/realm-java/issues/989 – beeender

Antwort

3

Ich würde annehmen, dass dies das ist, wonach Sie suchen?

RealmChangeListener<Account> listener = new RealmChangeListener() { 
    @Override 
    public void onChange(Account account) { 
     // changes have been made to Account table 
    } 
} 

Account mAccount; 

mAccount = mRealmInstance.where(Account.class).equalTo("isLoggedIn", true).findFirst(); 
if(mAccount != null) { 
    mAccount.addChangeListener(listener); 
    //assuming I'm in a transaction here 
    mAccount.setName("New Name"); 
} 

... 

if(mAccount.isValid()) { 
    mAccount.removeAllChangeListeners(); 
} 

Obwohl ich glaube, tun die RealmChangeListener aktiviert wird, wenn sich eine Änderung der Account Tabelle ist, und nicht nur, wenn diese besondere Objekt geändert wird.

(EDIT: da Realm 3.1+ Bereichs- Objekt Zuhörer sind auch feinkörnig, so dass es nur dann geändert wird, wenn das ausgewählte Konto geändert wird)

+0

Nicht sicher über die Aktivierung. Es scheint, dass die OnChange-Methode NUR aufgerufen wird, wenn Sie das ausgewählte Konto in der Account-Tabelle ändern. – Tobliug

+1

@Tobliug seit Realm 3.1+ Die Realm-Objekt-Listener sind ebenfalls feinkörnig und werden nur modifiziert, wenn das ausgewählte Konto geändert wird – EpicPandaForce