2009-12-11 8 views
6

Ich versuche, ein Array von Objekten zu schreiben, die Parcelable in Parcel mit writeParcelableArray implementieren.Schreiben von Arrays von Parcelables zu einem Paket in Android

Die Objekte Ich versuche, definiert zu schreiben (wie man erwarten würde) als:

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 versucht Eclipse-das ich den Fehler zu kompilieren:

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 >

diese Fehlermeldung, die ich nicht ganz verstehen. Parcelable ist eine Schnittstelle (keine Klasse), daher können Sie sie nicht erweitern. Hat jemand Ideen?

UPDATE: ich im Grunde das gleiche Problem bin, wenn ein ArrayList von Parcelable s in eine Intent setzen:

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

ergibt:

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

Dies kann daran liegen Location war die Klasse arbeitete ich oben (das wrappt die Arrival s), aber ich denke nicht.

Antwort

2

Es stellt sich heraus, es wollte nur ich eine Reihe von Parcelables 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); 
} 
+0

Wie bereits erwähnt, deklarieren Sie Ihr Array über die Schnittstelle. Freut mich, dass es geklappt hat. – harschware

3

Eigentlich können Sie eine Schnittstelle erweitern, und es sieht so aus, als ob Sie genau das tun müssen. Der generics-Parameter in writeParcelableArray fragt nach einer erweiterten Schnittstelle (nicht die Schnittstelle selbst). Versuchen Sie, eine Schnittstelle zu erstellen. MyParcable erweitert Parcelable. Dann deklarieren Sie Ihr Array über die Schnittstelle, aber das Impl sollte Ihr Arrival MyParcelable erweitern.

0

Ich weiß, dass das Problem gelöst ist, aber meine Lösung andere, so dass es hier Ich poste: in meinem Fall von Eclipse automatisch falsches Paket importiert, da der Klassen Name abiguity (einige dome .Kommentar statt meiner Kommentarklasse).