Scrivendo array di parcelables ad un pacco in Android
-
19-09-2019 - |
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 Parcelable
s in un Intent
:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
rendimenti:
Il metodo putParcelableArrayListExtra (String, ArrayList Estende Parcelable>) 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 Arrival
s), ma io non la penso così.
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)