2015-01-21 10 views
7

Ist es möglich, eigenständige Objekte zu einer RealmList eines RealmObject hinzuzufügen, das bereits in einem Realm vorhanden ist?Hinzufügen von Standalone-Objekten zu einer RealmList

Nun, ich weiß es nicht funktioniert, weil ich NPE an (object.row.getIndex():RealmList:94)

bekommen Was soll ich tun, ist:

mRealm.beginTransaction; 
contact.getEmails().add(new Email()); 
mRealm.commitTransaction; 

in diesem Moment, weil ich nicht haben Zugang zu einem Realm (na ja, ich könnte es funktioniert, aber ich müsste einige Strukturen neu zu schreiben), zum Beispiel:

//In Activity 
Contact contact = Realm.where(Contact.class).equalsTo("name","pete").findAll().first(); 
mRealm.beginTransaction; 
UpdateHelper.update(contact); 
mRealm.commitTransaction; 

//Helper class some else package 
public static void update(Contact contact) { 
    //do update stuff 
    contact.getEmails().add(new Email()); 
} 

`

Antwort

8

Christian aus Realm hier. Nein, momentan ist das nicht möglich. Es ist jedoch ein interessanter Anwendungsfall. Der Grund, warum wir eine Realm.copyToRealm() Methode haben, besteht darin, es explizit zu machen, dass Sie Ihr altes Objekt nicht mehr verwenden sollten. Das Hinzufügen von eigenständigen Objekten zu bereits persistenten Listen würde dies weniger transparent machen. Sie müssen es auch weiterhin in einer Schreibtransaktion ausführen. Das Hinzufügen eines Verweises auf das Realm in Ihrem Methodenaufruf wäre wahrscheinlich die beste Lösung.

//In Activity 
realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     Contact contact = realm.where(Contact.class) 
           .equalTo("name","pete") 
           .findFirst(); 
     if(contact != null) { 
      UpdateHelper.update(contact, realm); 
     } 
    } 
}); 

//helper method 
public static void update(Contact contact, Realm realm) { 
    //do update stuff 
    Email email = realm.copyToRealm(new Email()); 
    contact.getEmails().add(email); 
} 
+0

Ihre Lösung kam mir auch in den Sinn. Ich wollte nur klarstellen, ob es eine andere Möglichkeit gibt, als das Realm-Objekt durch eine Kaskade von Anrufen zu kanalisieren. Aber gut :) Muss ich wirklich eine Transaktion zweimal beginnen? Außerhalb der 'UpdateHelper.update()' und wieder innerhalb? – degill

+0

Nein. Das ist unnötig. Ich werde mein Beispiel aktualisieren. –

Verwandte Themen