android - 使用Gson实现parcelable接口(interface)

标签 android gson parcelable

我正在尝试使用 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/

相关文章:

java - 使用 GSON 从包含 JSON 映射的 JSON 对象创建 Java 对象

android - 制作一个包含自定义对象列表的类 parcelable

安卓:为什么是包裹?

android - 解析嵌套的 JSON 值并在按日期排序时显示在 recyclerview 中

android - Recyclerview 动态部分不使用任何第三库

android - 如何在 Android 上禁用方向更改?

java - GSON:将 JSON 数据输入到 Java 类,其中类名存储在字符串中

android - framebuffer OES 不完整,android

java - GsonConverter 未解决

android - Parcelable 中的标志有什么用?