如何在Parcelable类中写入和读取org.joda.time.Date?

5
我正在创建一个实现 Parcelable 接口的类。
public class PosicaoResumoMobile implements Parcelable {

private Float _Latitude;
private Float _Longitude;
private org.joda.time.DateTime _DataHora;
    ...

但是这个类有一个类型为org.joda.time.DateTime的属性。由于不可能使用out.writeDateTime(_DataHora),所以在实现Parcelable的以下方法中如何写入该属性呢?

@Override
public void writeToParcel(Parcel out, int flags) 
{
    //TODO: How to write org.joda.time.DateTime 
    out.writeFloat(_Latitude);
    out.writeFloat(_Longitude);
}

并且阅读

private PosicaoResumoMobile(Parcel in){
    //TODO: How to read org.joda.time.DateTime 
    Float latitude = in.readFloat();
    Float longitude = in.readFloat();
}
3个回答

7

您可以使用getMillis()获取毫秒数。

// to write to parcel
out.writeFloat(_Latitude);
out.writeLong(jodaDTInstance.getMillis())

// to read from parcel
Float longitude = in.readFloat();
jodaDTInstance = new DateTime(in.readLong());

好的,但是这种方式会丢失DateTime中包含的时区信息(以及年表信息)。 - Meno Hochschild
@MenoHochschild 你可以以同样的方式传递包含时区的日期字符串。 - DarkLeafyGreen

3

根据@artworkad的评论,如果您需要包含时区信息,则必须使用toString()和DateTime.parse():

写入parcel的方法:

dest.writeString(mDateTime.toString());

从包中读取:

mDateTime = DateTime.parse(in.readString());

0
尝试这段 Kotlin 代码:
写入:
out.writeSerializable(myDateObject)

读取:

myDateObject =  in.readSerializable() as Date

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接