我正在尝试使用 Gson 实现 parcelable 接口(interface)。想法是创建一个 json 字符串(使用 gson)并将其写入 parcel 对象。
这是否是实现接口(interface)的正确方法?
我遇到的唯一问题是在反序列化对象时。实际上,我使用 gson 来重新创建对象。
private MyClass(Parcel in) {
String json = in.readString();
Gson gson = new Gson();
gson.fromJson(json, getClass());
}
问题在于 fromJson
函数返回一个对象,该对象是构造函数应该创建的对象。
最后一行代码应该是这样的
this=gson.fromJson(json, getClass());
那么,如果这是实现 Parcelable
的正确方法,我该如何解决这个问题?
最佳答案
您应该更仔细地阅读 Parcelable javadoc .它包含您需要的一切。
如文档中所述:
Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.
因此,您应该声明 writeToParcel
方法,并使用一个创建器来从 Parcel 生成您的类的实例。
私有(private)构造函数是一个额外的帮助程序,您可以使用它来设置给定包裹的对象的字段值,但不能设置对象本身。在 Java 中,this
是一个正确的值,不能赋值。
顺便说一句,parcelisation 的目标是提供一个短期的快速序列化过程。一般来说,当您使用 parcelisation 时,您应该使用快速和紧凑的数据格式。 JSON 不是候选选项,但它会起作用。
关于android - 使用Gson实现parcelable接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890673/