2015-01-21 14 views
7

Bir alandaki kalıcı bir RealmObject RealmList öğesine bağımsız nesneler eklemek mümkün mü?Bir RealmList'e bağımsız nesne ekleme

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

o belirli bir anda bir Realm erişiminiz yok Çünkü: I (object.row.getIndex():RealmList:94)

de NPEs olsun, çünkü

Eh, Ne yapmak istediğim, işe yaramazsa biliyorum örneğin, (Ben bu işe yapabiliriz, ama bazı yapılar yeniden yazmak zorunda kalacak):

//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()); 
} 

`

cevap

8

Realm'den Christian buraya. Hayır, şu anda bu mümkün değil. Yine de ilginç bir kullanım örneğidir. Realm.copyToRealm() yöntemimizin nedeni, eski nesneyi artık kullanmamanız gerektiğini açıkça ifade etmektir. Zaten kalıcı listelere bağımsız nesneler eklemeye izin vermek, bunu daha az şeffaf hale getirecektir. Yazma işleminde de olmasına hala ihtiyacınız var. Metot çağrınızda Realm'ye bir referans eklemek muhtemelen onu çözmenin en iyi yolu olacaktır.

//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

Çözümünüz de aklıma geldi. Sadece bir arama çağrısı boyunca Realm nesnesini kanalize etmekten başka bir seçenek olup olmadığını netleştirmek istedim. Ama yine de iyi :) Gerçekten iki kez bir işlem yapmaya ihtiyacım var mı? UpdateHelper.update() 'in dışında ve tekrar içeride mi? – degill

+0

Hayır. Bu gereksizdir. Örneğimi güncelleyeceğim. –

İlgili konular