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类的创建者,如下所示
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();
}
现在我们让一个类完整的完整证明可打包。需要注意的一件事是,我们需要在 受保护的城市(Parcel in)以相同的顺序读取成员, 我们将它们放在 Parcel 中,即在 writeToParcel() 方法中。
关于如何在简单地让 android 从 parcelable 创建 java 对象时重现 badParcelable 异常。为此,您可以从 android 设备上的开发人员选项中选择 Destroy 活动,并将您的应用程序置于该活动的后台,以便 android 杀死您的应用程序进程 ID。通过重新创建活动(onCreate + Bundle)来恢复您的应用程序,如果您没有正确实现 parcelable,您将收到该异常。