2015-01-21 8 views
7

पर स्टैंडअलोन-ऑब्जेक्ट्स जोड़ना क्या एक रीयलम ऑब्जेक्ट के रीयलमलिस्ट को स्टैंडअलोन ऑब्जेक्ट्स जोड़ना संभव है जो पहले से ही एक क्षेत्र में बनी हुई है?एक रीयलमलिस्ट

ठीक है, मैं, यह does not काम जानते हैं, क्योंकि मैं कम से (object.row.getIndex():RealmList:94)

NPEs मिल मुझे क्या करना चाहते हैं:

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

क्योंकि उस विशिष्ट समय मैं न एक क्षेत्र के लिए उपयोग किया (अच्छी तरह से मैं यह काम कर सकता है, लेकिन मैं कुछ संरचनाओं के पुनर्लेखन के लिए होता है), उदाहरण के लिए:

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

`

उत्तर

8

यहां से दायरे से ईसाई। नहीं, वर्तमान में यह संभव नहीं है। हालांकि यह एक दिलचस्प उपयोग मामला है। हमारे पास Realm.copyToRealm() विधि है क्योंकि यह वास्तव में स्पष्ट है कि अब आपको अपनी पुरानी वस्तु का उपयोग नहीं करना चाहिए। पहले से ही सूचियों वाली सूची में स्टैंडअलोन ऑब्जेक्ट्स जोड़ने की अनुमति देने से यह कम पारदर्शी हो जाएगा। आपको अभी भी लिखने के लेनदेन के अंदर होने की आवश्यकता है। अपनी विधि कॉल में दायरे में एक संदर्भ जोड़ना शायद इसे हल करने का सबसे अच्छा तरीका होगा।

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

आपका समाधान भी मेरे दिमाग में आया। मैं बस स्पष्ट करना चाहता था कि कॉल के कैस्केड के माध्यम से दायरे के ऑब्जेक्ट को चैनलिंग करने के अलावा कोई अन्य विकल्प है या नहीं। लेकिन ओह ठीक है :) क्या मुझे वास्तव में दो बार लेनदेन शुरू करने की ज़रूरत है? 'UpdateHelper.update()' और फिर के भीतर के बाहर? – degill

+0

नहीं। यह अनावश्यक है। मैं अपना उदाहरण अपडेट करूंगा। –