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 Parcelables in eine Intent setzen:

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

ergibt:

  

Die Methode putParcelableArrayListExtra (String, Arraylist ) 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 Arrivals Wraps), aber ich glaube nicht.

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top