Я не понял, как создать код, необходимый для правильной реализации Parcelable
для объекта, который содержит GregorianCalendar
объектов.Как создать Parcelable код для объекта, который содержит GregorianCalendar
E.g. для объекта User
, который содержит String name;
и GregorianCalendar creationDate;
, моя попытка это:
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeParcelable(this.creationDate, flags);
}
private User(Parcel in) {
this.name = in.readString();
this.creationDate = in.readParcelable(GregorianCalendar.class.getClassLoader());
}
public static final Creator<User> CREATOR = new Creator<User>() {
public User createFromParcel(Parcel source) {
return new User(source);
}
public User[] newArray(int size) {
return new User[size];
}
};
что, к сожалению, не работает
в writeToParcel()
на линии
dest.writeParcelable(this.creationDate, flags);
получить writeParcelable не может быть применен к GregorianCalendar ошибка
в
this.creationDate = in.readParcelable(GregorianCalendar.class.getClassLoader());
получить Несовместимые типы ошибок
Как правильно кодировать Parcelable
?
EDIT
Я пробовал некоторые генераторы кода, но использует разные способы, и я не уверен, что это право реализации, первое использование WriteValue и readValue таким образом:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeValue(creationDate);
}
protected User(Parcel in) {
name = in.readString();
creationDate = (GregorianCalendar) in.readValue(GregorianCalendar.class.getClassLoader());
}
второй использовать
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeSerializable(creationDate);
}
protected User(Parcel in) {
name = in.readString();
creationDate = (GregorianCalendar) in.readSerializable();
}
Что такое правильный путь?
Вы пытались использовать http://www.parcelabler.com/? – EpicPandaForce
Нет, но я попытался использовать плагин с расширением кода, но создает неправильный код. Сайт, который вы связали использование 'CreationDate = (GregorianCalendar) in.readValue (GregorianCalendar.class.getClassLoader());' и 'dest.writeValue (CreationDate),' Вы могли бы подтвердить, что это правильный путь Parcel GregorianCalendar? – AndreaF
@ Zhuinden см. Редактирование. – AndreaF