2009-12-11 5 views
6

Sto provando a scrivere un array di oggetti che implementano Parcelable in un Parcel utilizzando writeParcelableArray.Scrittura di matrici di Parcelables su un pacco in Android

Gli oggetti che sto cercando di scrivere sono definiti (come ci si aspetterebbe) come:

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

e sto cercando di scriverle in un `Parcel' con:

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

Quando Eclipse tenta di compilare questo ottengo l'errore:

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 >

sono completamente non capisco questo messaggio di errore. Parcelable è un'interfaccia (non una classe), quindi non è possibile estenderla. Qualcuno ha qualche idea?

UPDATE: Sto avendo sostanzialmente lo stesso problema quando porre ArrayList di Parcelable s in un Intent:

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

rendimenti:

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

Ciò può essere perché era il Location classe che stavo lavorando sopra (che avvolge il Arrival s), ma io non la penso così.

risposta

2

Si scopre che volevo solo che io costruissi una serie di Parcelables. Per utilizzare l'esempio dalla domanda:

@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

Come ho detto, dichiara il tuo array usando l'interfaccia. Sono felice che tu l'abbia risolto. – harschware

3

In realtà, è possibile estendere un'interfaccia e sembra proprio che sia necessario. Il parametro generics in writeParcelableArray richiede un'interfaccia estesa (non l'interfaccia stessa). Prova a creare un'interfaccia MyParcelable estende Parcelable. Quindi dichiarare il tuo array usando l'interfaccia, ma l'impl dovrebbe essere il tuo arrivo estende MyParcelable.

0

So che il problema è risolto, ma la mia soluzione è stata altro modo sto postando qui: nel mio caso Eclipse importato automaticamente pacchetto sbagliato a causa di classi nomi abiguity (alcuni dom .Comment invece della mia classe Comment).