2016-06-16 23 views
0

Ich versuche, Daten über Aktivitäten mit Parcelable zu übergeben. Dies ist mein Code:Android - Paket: Wert nicht marshalieren

public class Player implements Parcelable { 

public static final Parcelable.Creator<Player> CREATOR = new Parcelable.Creator<Player>() { 
    public Player createFromParcel(Parcel in) { 
     return new Player(in); 
    } 

    public Player[] newArray(int size) { 
     return new Player[size]; 
    } 
}; 
private String name; 
private List<Card> listCards; 

public Player(String namePlayer) { 
    name = namePlayer; 
    listCards = new ArrayList<>(); 
} 

private Player(Parcel in) { 
    // This order must match the order in writeToParcel() 
    name = in.readString(); 
    in.readList(listCards, null); 
    // Continue doing this for the rest of your member data 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(name); 
    dest.writeList(listCards); 
} 

Immer wenn ich diesen Code ausführen, ich den Fehler:

java.lang.RuntimeException: Parcel: unable to marshal value [email protected] 

Haben Sie eine Ahnung, was das Problem sein könnte?

Dank

+0

Karte ist eine separate Klasse? Implementiert das "Parcelable"? – jitinsharma

+0

Karte ist in der Tat eine separate Klasse, implementiert jedoch Parcelable nicht. –

Antwort

6
@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(name); 
    dest.writeList(listCards); 
} 

Da Card Klasse nicht Parcelable nicht implementiert Sie nicht writeList/readList tun können. Es gilt nur für die Liste der Parcelable Objekte.

+0

Es ist nicht nur anwendbar auf Parcelable, nur fällt es zurück zu schreiben Parcelable, wenn es keine andere Art von Objekt ist, das Parcel-ed –

+0

@ cricket_007 Serializable kann auch in 'writeToParcel' funktionieren? – jitinsharma

+0

'writeList' Schleifen über alle Objekte und' 'writeValue (Object)' - Die Liste finden Sie hier https://developer.android.com/reference/android/os/Parcel.html#writeValue(java.lang.Object) –