使用Gson实现Parcelable接口

5

我正在尝试使用Gson实现可包裹接口(Parcelable)。想法是创建一个JSON字符串(使用Gson),然后将其写入包裹对象。

这是实现接口的正确方法吗?

唯一遇到的问题是当我反序列化对象时。实际上,我使用Gson重新创建对象。

private MyClass(Parcel in) {
    String json = in.readString();
    Gson gson = new Gson();
    gson.fromJson(json, getClass());
}

问题在于fromJson函数返回的对象是构造函数应该创建的对象。 代码的最后一行应该是类似这样的:
this=gson.fromJson(json, getClass());

如果这是实现Parcelable的正确方式,那么我该如何解决这个问题呢?

1个回答

3

您应该仔细阅读Parcelable javadoc,它包含了你所需要的一切。

文档中引用的内容:

一个接口,它的实例可以被写入和从 Parcel 中恢复。 实现 Parcelable 接口的类也必须有一个名为 CREATOR 的静态字段, CREATOR 是实现 Parcelable.Creator 接口的对象。

因此,您应该声明writeToParcel方法,还使用可以从 Parcel 生产出您的类实例的 creator。

私有构造函数是一个额外的帮助器,您可以使用它来设置对象字段的值,但不能设置对象本身的值。在 Java 中,this是一个正确的值,不能被分配。

顺便说一下,parcelisation 的目标是提供短期快速的序列化过程。通常情况下,当您使用 parcelisation 时,应使用快速且紧凑的数据格式。JSON 不是一个首选的候选项,但它仍然可以使用。


好的,谢谢。我已经知道如何实现Parcelable了。我只是想知道是否使用json符号来实现它会更好,因为使用gson会更快速实现。 - Daniele Vitali
为什么“JSON不是首选项”?您说它应该快速且紧凑,而JSON是紧凑的,并且在正常情况下应该足够快。我喜欢使用Json来做这件事。 - CorayThan
@CorayThan,二进制格式压缩更多,通常比解析字符串更快地进行压缩/解压缩。 - Snicolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接