Ich arbeite mit der Paketklasse. Wie kann ich java.util.Date
Objekte zu und von dieser Klasse lesen und schreiben ?
79
Verwenden Sie writeSerializable, wobei Date Serializable ist. ( Aber keine gute Idee. Siehe unten für einen anderen besseren Weg )
@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();
}
Serialisierungsvorgänge verbrauchen jedoch viel Leistung. Wie kann das überwunden werden?
Daher ist es besser, das Datum beim Schreiben in Long zu konvertieren, Long zu lesen und an den Date-Konstruktor zu übergeben, um das Datum abzurufen. Siehe unten Code
@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());
}
In Kotlin können wir eine Erweiterung für Parcel erstellen - die einfachste Lösung.
fun Parcel.writeDate(date: Date?) { writeLong(date?.time ?: -1) } fun Parcel.readDate(): Date? { val long = readLong() return if (long != -1L) Date(long) else null }
Und benutze es
quelle
Verwenden Sie date.getTime (), um das Langformat abzurufen :
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]; } }; }
quelle
Versuchen Sie dies (Kotlin):
data class DateParcel(val date: Date?):Parcelable { constructor(parcel: Parcel) : this(parcel.readValue(Date::class.java.classLoader) as? Date ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeValue(date) } override fun describeContents(): Int { return 0 } companion object CREATOR : Parcelable.Creator<DateParcel> { override fun createFromParcel(parcel: Parcel): DateParcel { return DateParcel(parcel) } override fun newArray(size: Int): Array<DateParcel?> { return arrayOfNulls(size) } }}
quelle
Date
Klasse implementiertSerializable
...so kannst du schreiben
und du kannst gerne lesen
quelle
Versuchen Sie dies auf diese Weise ::
für schreiben ::
zum lesen ::
quelle