Schreiben Arrays von Parcelables zu einem Paket in Android
-
19-09-2019 - |
Frage
Ich versuche, ein Array von Objekten zu schreiben, implementieren Parcel in einem Parcel mit writeParcelableArray .
Die Objekte Ich versuche, definiert zu schreiben (wie man erwarten würde), wie:
public class Arrival implements Parcelable {
/* All the right stuff in here... this class compiles and acts fine. */
}
Und ich versuche, sie in ein `Paket zu schreiben‘ mit:
@Override
public void writeToParcel(Parcel dest, int flags) {
Arrival[] a;
/* some stuff to populate "a" */
dest.writeParcelableArray(a, 0);
}
Wenn Eclipse-versucht dies zu kompilieren bekomme ich den Fehler:
Bound Mismatch: Die generische Methode writeParcelableArray (T [], int) vom Typ Paket ist nicht anwendbar für die Argumente (Arrival [], int). Das abgeleiteten Typ Ankunft ist keine gültige Ersatz für den beschränkten Parameter
ich völlig verstehe nicht, diese Fehlermeldung. Parcelable
ist eine Schnittstelle (keine Klasse), so dass Sie kann es nicht verlängern. Wer irgendwelche Ideen?
UPDATE: Ich habe im Grunde das gleiche Problem, wenn ein ArrayList
von Parcelable
s in eine Intent
setzen:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
ergibt:
Die Methode putParcelableArrayListExtra (String, Arraylist Erweitert Parcel>) in der Art Intent für die Argumente nicht anwendbar ist (String, Arraylist
)
Das kann sein, weil Location
die Klasse war ich oben arbeitete an (dass die Arrival
s Wraps), aber ich glaube nicht.
Lösung 2
Es stellt sich heraus, es wollte, dass ich nur eine Reihe von Parcelables zu bauen. Um das Beispiel von der Frage zu verwenden:
@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);
}
Andere Tipps
Eigentlich kann man eine Schnittstelle erweitern, und es sieht aus wie Sie genau tun müssen. Die Generika-Parameter in writeParcelableArray bitten um eine erweiterte Schnittstelle (nicht die Schnittstelle selbst). Versuchen, eine Schnittstelle zu schaffen MyParcelable Parcel erstreckt. Dann wird Ihr Array deklarieren die Schnittstelle verwenden, aber die impl sollte Ihre Ankunft MyParcelable erstreckt.
ich weiß, ist das Problem gelöst, aber meine Lösung andere, so dass es hier Ich poste: in meinem Fall von Eclipse automatisch wegen Klassen Namen abiguity falsches Paket importiert (einige dom.Comment statt meiner Bemerkung Klasse)