2016-06-16 9 views
0

Я пытаюсь передать данные через действия с Parcelable. Это мой код:Android - Посылка: не удалось изменить значение

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); 
} 

Всякий раз, когда я запускаю этот код, я получаю ошибку:

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

Есть ли у вас какие-либо идеи, что может быть проблема?

Благодаря

+0

Карточка - это отдельный класс? Это реализует «Parcelable»? – jitinsharma

+0

Карта действительно отдельный класс, но она не реализует Parcelable. –

ответ

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

Поскольку Card класс не реализует Parcelable вы не можете сделать writeList/readList. Он применим только к списку объектов Parcelable.

+0

Он применим не только к Parcelable, он возвращается к написанию Parcelable, если он не является другим типом объекта, который может быть Parcel-ed –

+0

@ cricket_007 Serializable также будет работать в 'writeToParcel'? – jitinsharma

+0

'writeList' перебирает все объекты и выполняет' writeValue (Object) '- Список можно найти здесь https://developer.android.com/reference/android/os/Parcel.html#writeValue(java.lang.Object) –