Parcelable 클래스에서 일하고 있습니다. java.util.Date
이 클래스에서 객체를 읽고 쓸 수 있습니까?
답변
Date가 Serializable 인 경우 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();
}
그러나 직렬화 작업은 많은 성능을 소비합니다. 이것을 어떻게 극복 할 수 있습니까?
따라서 더 나은 사용법은 작성하는 동안 날짜를 Long으로 변환하고 Long을 읽고 Date 생성자에 전달하여 Date를 얻는 것입니다. 아래 코드 참조
@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());
}
답변
Kotlin 에서는 가장 간단한 솔루션 인 Parcel 용 확장 프로그램을 만들 수 있습니다.
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()
답변
Long 형식을 얻으려면 date.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];
}
};
}
답변
이것을 시도하십시오 (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)
}
}}
답변
Date
클래스 구현 Serializable
…
그래서 당신은 쓸 수 있습니다
parcel.writeSerializable(java.util.Date)
그리고 당신은 다음과 같이 읽을 수 있습니다
java.util.Date date = (java.util.Date)parcel.readSerializable();
답변
다음과 같이 시도하십시오. :
쓰기 ::
yourParse.writeSerializable(YourGivenDate)
읽기 ::
Date myDate = yourParse.readSerializable();