Parcelable 实现主要有两个流程步骤。
1 将您的 java 对象写入 Parcel,其中包括两个方法。
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(cityName);
dest.writeString(macroName);
dest.writeString(id);
}
其中 describe content 用于为您的内容设置标志。大多数时候你只需要保持原样。
public void writeToParcel(Parcel dest, int flags) ,你需要根据JAVA类中的字段,一步一步编写你的Java类对象到parcel。在上面的例子中,我的类有三个字符串。您可以在包裹中写入几乎所有类型的对象。你只需要选择一个合适的。像 writeString(),writeList() 或 writeObject() 等。
2。第二部分是从包裹中读取您的 java 对象
这部分也需要两件事。首先是您的 java 类的 CREATOR,如下所示
public static final Creator<City> CREATOR = new Creator<City>() {
@Override
public City createFromParcel(Parcel in) {
return new City(in);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
在上面的例子中,我的 Java 类是 City。它使从包裹中读取城市对象。但它调用 City 类的 new City(in) 构造函数。所以现在我需要一个在参数中接受包裹对象的构造函数。让我们也创建它..
protected City(Parcel in) {
cityName = in.readString();
macroName = in.readString();
id = in.readString();
}
现在我们使一个类完全完全证明可打包。需要注意的一点是,我们需要在 protected City(Parcel in) 中以相同的顺序读取成员,我们将它们放入 parcel 中,即在 writeToParcel() 方法中。
关于如何在简单地让 android 从 parcelable 创建 java 对象时重现 badParcelable 异常。为此,您可以从 android 设备上的开发人员选项中选择 Destroy 活动,并将您的应用程序置于该活动的后台,以便 android 杀死您的应用程序进程 ID。通过重新创建活动(onCreate + Bundle)来恢复您的应用,如果您没有正确实现 parcelable,您将收到该异常。