提问者:小点点

这是通过Parcelable传递Period类的正确方式吗


我有一个实现Parcelable的类,但它只有基元类型作为成员。

到目前为止,我在两个活动之间毫无问题地传递了这个类的一个实例作为Parcelable。

但是我要添加一个类型为句点的成员(java.time)。

在internet上进行研究时,我发现传递一个实现parcelable的类的成员对象(非parcelable),我实际上应该传递这个对象的字段(基元类型或字符串)通过parcelable,而不是传递整个对象(因为它没有实现parcelable)

查看文档,Period类没有实现Parcelable。

那么,这是通过包裹的正确方式吗?

Period objPeriod;

public void writeToParcel(Parcel out, int flags){
    out.writeString(objPeriod.toString());
}

private MyClass(Parcel in){
    objParcel.parse(in.readString());
}

共1个答案

匿名用户

perioD实现了serializable,因此您可以这样编写它。

public void writeToParcel(Parcel out, int flags) {
  out.writeSerializable(objPeriod);
}

private MyClass(Parcel in) {
  objPeriod = (Period) in.readSerializable();
}

但是,如果可能的话,最好避免serializable。 鉴于perioD的Javadoc确实专门定义了一个结构化的toString()实现,然后可以解析回:

将此周期输出为字符串,如P6Y3M1D。

那么我认为您最初的建议应该完全可以接受,使用静态的period.parse()方法:

从文本字符串(如pnynmnd)中获取句点。

这将解析toString()生成的字符串,该字符串基于ISO-8601句点格式PnYnMnD和PNW。

public void writeToParcel(Parcel out, int flags) {
  out.writeString(objPeriod.toString());
}

private MyClass(Parcel in) {
  objPeriod = Period.parse(in.readString());
}