是因为Parcelable对象在序列化和反序列化过程中,只会保存和恢复对象的状态,而不会保存和恢复对象的成员变量的值。这是因为Parcelable接口是Android特有的接口,用于高效地在不同组件之间传递数据。
为了解决这个问题,可以在Parcelable对象中实现以下方法:
具体步骤如下:
public class MyParcelable implements Parcelable {
private int value;
public MyParcelable(int value) {
this.value = value;
}
protected MyParcelable(Parcel in) {
value = in.readInt();
}
public int getValue() {
return value;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(value);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<MyParcelable> CREATOR = new Creator<MyParcelable>() {
@Override
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
@Override
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
}
// 序列化Parcelable对象
MyParcelable myParcelable = new MyParcelable(10);
Parcel parcel = Parcel.obtain();
myParcelable.writeToParcel(parcel, 0);
byte[] bytes = parcel.marshall();
// 反序列化Parcelable对象
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
MyParcelable newParcelable = MyParcelable.CREATOR.createFromParcel(parcel);
int value = newParcelable.getValue();
变量的值在Parcelable对象的构造函数之外丢失的解决方案是通过Parcelable接口的writeToParcel方法将需要保存的成员变量的值写入Parcel对象中,并在Parcelable.Creator的createFromParcel方法中恢复这些值。这样,在序列化和反序列化过程中,成员变量的值就能够得到正确的保存和恢复。
腾讯云相关产品推荐:
领取专属 10元无门槛券
手把手带您无忧上云