2009-12-11 9 views
6

मैं ParcelablewriteParcelableArray का उपयोग कर Parcel में लागू करने वाली वस्तुओं की एक सरणी लिखने की कोशिश कर रहा हूं।एंड्रॉइड में पार्सल के लिए पार्सलबल्स के लेखन सरणी

वस्तुओं मैं लिखने के लिए कोशिश कर रहा हूँ (आपकी अपेक्षानुसार) के रूप में परिभाषित कर रहे हैं:

public class Arrival implements Parcelable { 
    /* All the right stuff in here... this class compiles and acts fine. */ 
} 

और मैं उन्हें एक `साथ पार्सल 'में लिखने के लिए कोशिश कर रहा हूँ:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Arrival[] a; 
    /* some stuff to populate "a" */ 
    dest.writeParcelableArray(a, 0); 
} 

Bound mismatch: The generic method writeParcelableArray(T[], int) of type Parcel is not applicable for the arguments (Arrival[], int). The inferred type Arrival is not a valid substitute for the bounded parameter < T extends Parcelable >

मैं पूरी तरह से इस त्रुटि संदेश समझ में नहीं आता:

जब ग्रहण इस मैं त्रुटि मिलती है संकलित करने के लिए कोशिश करता है। Parcelable एक इंटरफ़ेस है (कक्षा नहीं) ताकि आप इसे विस्तारित न कर सकें। क्या किसी के भी पास कोई सुझाव है?

अद्यतन:

Intent i = new Intent(); 
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations); 

पैदावार: मैं जब Parcelable रों के ArrayList एक Intent में डाल मूलतः एक ही समस्या आ रही है

The method putParcelableArrayListExtra(String, ArrayList< ? extends Parcelable >) in the type Intent is not applicable for the arguments (String, ArrayList< Location >)

ऐसा संभवत: Location था कक्षा मैं ऊपर काम कर रहा था (जो Arrival एस लपेटता है), लेकिन मुझे ऐसा नहीं लगता है।

उत्तर

2

यह पता चला कि यह सिर्फ मुझे पार्ससेलबल्स की एक सरणी बनाना चाहता था।

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Parcelable[] a; 
    /* 
     some stuff to populate "a" with Arrival 
     objects (which implements Parcelable) 
    */ 
    dest.writeParcelableArray(a, 0); 
} 
+0

जैसा कि मैंने कहा, इंटरफ़ेस का उपयोग करके अपनी सरणी घोषित करें। खुशी है कि आप इसे काम किया है। – harschware

3

असल में, आप एक इंटरफ़ेस बढ़ा सकते हैं, और ऐसा लगता है कि आपको बस ऐसा करने की आवश्यकता है। लिखने में जेनेरिक पैरामीटर ParcelableArray एक विस्तारित इंटरफ़ेस (इंटरफ़ेस स्वयं नहीं) के लिए पूछ रहा है। एक इंटरफेस बनाने का प्रयास करें MyParcelable पार्ससेलबल फैलाता है। फिर इंटरफ़ेस का उपयोग करके अपनी सरणी घोषित करें, लेकिन इम्प्लाइज होना चाहिए आपका आगमन MyParcelable को बढ़ाता है।

0

मैं जानता हूँ कि समस्या हल हो गया है, लेकिन मेरे समाधान किया गया था अन्य तो मैं इसे यहाँ पोस्ट कर रहा हूँ: मेरे मामले ग्रहण में स्वचालित रूप से कक्षाओं नाम abiguity की वजह से गलत पैकेज आयातित (कुछ डोम सवाल से उदाहरण का उपयोग करने के मेरी टिप्पणी कक्षा के बजाय टिप्पणी)।

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