5 ответов:
использовать writeSerializable где дата Сериализуема. (но не очень хорошая идея. Ниже еще лучше)
@Override public void writeToParcel(Parcel out, int flags) { // Write object out.writeSerializable(date_object); } private void readFromParcel(Parcel in) { // Read object date_object = (java.util.Date) in.readSerializable(); }
но операции сериализации потребляют много производительности. Как можно преодолеть это?
так что лучше использовать, чтобы преобразовать дату в долго во время записи, и читать долго и перейти к дате конструктора, чтобы получить дату. Смотрите ниже код
@Override public void writeToParcel(Parcel out, int flags) { // Write long value of Date out.writeLong(date_object.getTime()); } private void readFromParcel(Parcel in) { // Read Long value and convert to date date_object = new Date(in.readLong()); }
использовать дата.getTime () для получения длинного формата:
public class MiClass implements Parcelable { Date date; public MiClass(Date date) { this.date = date; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(date != null ? date.getTime() : -1); } protected MiClass(Parcel in) { long tmpDate = in.readLong(); this.date = tmpDate == -1 ? null : new Date(tmpDate); } public static final Parcelable.Creator<MiClass> CREATOR = new Parcelable.Creator<MiClass>() { public MiClass createFromParcel(Parcel source) { return new MiClass(source); } public MiClass[] newArray(int size) { return new MiClass[size]; } }; }
на Котлин мы можем создать расширение для участка - самое простое решение.
fun Parcel.writeDate(date: Date?) { writeLong(date?.time ?: -1) } fun Parcel.readDate(): Date? { val long = readLong() return if (long != -1L) Date(long) else null }и использовать его
parcel.writeDate(date) parcel.readDate()
Dateкласс реализуетSerializable...можно писать
parcel.writeSerializable(java.util.Date)и вы можете читать как
java.util.Date date = (java.util.Date)parcel.readSerializable();
попробуйте это таким образом::
для пишешь::
yourParse.writeSerializable(YourGivenDate)для чтения::
Date myDate = yourParse.readSerializable();
Comments