Domanda

Sto cercando di scrivere una serie di oggetti che implementano Parcelable in un Parcel utilizzando writeParcelableArray .

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 scrivere loro 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 cerca di compilare questo ottengo l'errore:

  

non corrispondente Bound: Il metodo generico   writeParcelableArray (T [], int) di tipo   Pacco non è applicabile per la   argomenti (arrivo [], int). Il   tipo derivato di arrivo non è una valida   sostituto del parametro limitato   

Sono completamente non capisco questo messaggio di errore. Parcelable è un'interfaccia (non una classe) quindi non si può allungare. Qualcuno ha qualche idea?

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

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

rendimenti:

  

Il metodo putParcelableArrayListExtra (String, ArrayList ) nel tipo intenti non è applicabile per gli argomenti (String, ArrayList )

Questo può essere dovuto al fatto Location era la classe su cui stavo lavorando sopra (che avvolge il Arrivals), ma io non la penso così.

È stato utile?

Soluzione 2

Si scopre solo a me ha voluto costruire 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);
}

Altri suggerimenti

In realtà, è possibile estendere l'interfaccia, e sembra che tu abbia bisogno di fare proprio questo. Il parametro di farmaci generici in writeParcelableArray chiede un'interfaccia estesa (non l'interfaccia stessa). Prova a creare un'interfaccia MyParcelable estende Parcelable. Poi dichiarando la matrice utilizzando l'interfaccia, ma l'impl dovrebbe essere la vostra arrivo estende MyParcelable.

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 al posto della mia classe Comment)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top