从Parcelable类读取和写入java.util.Date
我正在使用Parcelable类。 我如何读写这个类的java.util.Date
对象?
使用writeSerializable ,其中Date是可序列化的。 ( 但不是一个好主意,请参阅下面的另一个更好的方法 )
@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()); }
使用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 CREATOR = new Parcelable.Creator () { public MiClass createFromParcel(Parcel source) { return new MiClass(source); } public MiClass[] newArray(int size) { return new MiClass[size]; } }; }
在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()
Date
类实现了Serializable
…
所以你可以写
parcel.writeSerializable(java.util.Date)
你可以阅读
java.util.Date date = (java.util.Date)parcel.readSerializable();
试试这个方法::
写::
yourParse.writeSerializable(YourGivenDate)
阅读::
Date myDate = yourParse.readSerializable();
- 用模块初始化Jersey客户端的正确方法是什么?
- 在gradle应用程序中找不到ant-javafx
- 从Java转换到Kotlin时出错。 错误 – org.gradle.api.tasks.TaskExecutionException:任务执行失败:app:compileDebugKotlin'
- 使用Kotlin的数字操作是否像Java原语一样快?
- 在android kotlin中,使用步进库将自定义单选按钮值传递给多个片段,以便在摘要页面上使用
- kotlin接口能缓存一个值吗?
- 在java开关表达式中使用kotlin常量
- com.google.gson.internal.LinkedTreeMap不能转换为我的类
- 从Java访问Kotlin扩展函数