2012-03-28 10 views
10

अब तक मैं बिना किसी समस्या के Parcelable ऑब्जेक्ट्स के साथ चिपक रहा हूं, मुख्य रूप से क्योंकि उनके सभी सदस्य ऐसे प्रकार हैं जिनके साथ writeX() विधियां हैं। उदाहरण के लिए, मैं करता हूँ:ऑब्जेक्ट सदस्यों को पार्सल पर लिखना

public String name; 

private Foo(final Parcel in) { 
    name = in.readString(); } 
public void writeToParcel(final Parcel dest, final int flags) { 
    dest.writeString(name); } 

लेकिन अब अगर मैं एक Bar सदस्य बातें मेरे लिए एक छोटे से dicey मिलता है:

public Bar bar; 

private Foo(final Parcel in) { 
    bar = new Bar(); //or i could actually write some constructor for Bar, this is a demo. 
    bar.memberString = in.readString(); 
} 

public void writeToParcel(final Parcel dest, final int flags) { 
    // What do I do here? 
} 

मैं इस गलत तरीके से आ रहा है? मुझे अपने writeToParcel में पार्सल सदस्य Bar एस में क्या करना चाहिए?

उत्तर

25

सही और अधिक ओओ रास्ता बार बार पार्सलबल को लागू करता है।

अपने निजी फू निर्माता में बार पढ़ने के लिए:

private Foo(final Parcel in) { 
    ... ... 
    bar = in.readParcelable(getClass().getClassLoader()); 
    ... ... 
} 

अपने writeToParcel विधि में बार लिखने के लिए:

public void writeToParcel(final Parcel dest, final int flags) { 
    ... ... 
    dest.writeParcelable(bar, flags); 
    ... ... 
} 

आशा इस मदद करता है।

+2

जोड़ना क्योंकि कुछ यहां भ्रमित हो सकते हैं ** getClass()। GetClassLoader() ** का अर्थ है ** Bar.class.getClassLoader() ** – Juni

+0

यदि मेरी कक्षा एसडीके द्वारा प्रदान की जाती है और संशोधित नहीं किया जा सकता है तो मुझे क्या करना चाहिए ? – Eido95

0

पारसी एक दर्द है और केवल मूल्य से गुजरता है और संदर्भ नहीं। मैं उनका इस्तेमाल कभी भी सिफारिश नहीं करता। यदि आप आवेदन करते हैं तो बस एक स्थिर मॉडल उदाहरण बनाएं और आपको जिस ऑब्जेक्ट की आवश्यकता है उसके लिए एक शिम संदर्भ प्राप्त करें।

+0

एक बुद्धिमान व्यक्ति से शब्द –

+0

एक सिद्धांत सिद्धांत के रूप में सिंगलेट का उपयोग ऑब्जेक्ट उन्मुख प्रोग्रामिंग में त्रुटिपूर्ण है। जेसन में deserialize या मूल्यों को स्टोर, एक वैश्विक वर्ग नहीं है आपके सभी अन्य वर्गों तक पहुंच सकते हैं। – HarshMarshmallow

संबंधित मुद्दे