繁体   English   中英

如何在 Java 中的 Parcelable 类中打包对象类型

[英]how to parcel Object type in Parcelable class in Java

这个类如何实现可分割的权利。 我不能做包裹对象类型。字符串,双,整数,..变量类型设置为对象类型。

public class MyClass implements Parcelable {
    public String Name;
    public Object Value; //variables type to set

    protected MyClass(Parcel in) {
        Name = in.readString();
        //Value = in.?
    }

    public static final Creator<MyClass> CREATOR = new Creator<MyClass>() {
        @Override
        public MyClass createFromParcel(Parcel in) {
            return new MyClass(in);
        }

        @Override
        public MyClass[] newArray(int size) {
            return new MyClass[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Name);
        //dest.
    }
}

可能我为时已晚,但这可能会帮助其他人寻找相同的东西。

由于 Object 类没有实现 Parcelable,因此需要一种解决方法。 我克服这个障碍的一种方法是使用 GSON 并将序列化和反序列化为字符串和从字符串。

例如:

public class MyClass implements Parcelable {
    public String Name;
    public Object Value; //variables type to set

    protected MyClass(Parcel in) {
        Name = in.readString();
        Value = new Gson().fromJson(in.readString(), Object.class);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Name);
        dest.writeString(new Gson().toJson(Value));
    }

}
  • 写入包裹时,使用 GSON 将对象(序列化)转换为 JSON 字符串并将其作为字符串写入包裹。
  • 从包裹读取时,将包裹作为字符串读取并再次使用 Gson 将其转换(反序列化)为 Object 类。

Parcel文档非常明确地说明了您可以做什么,这里有一些想法。

你有方法writeParcelable来做到这一点,但你不能打包一个Object因为Object没有实现Parcelable

您需要定义一个为您的value实现Parcelableclass

public class MyClass implements Parcelable {
    public String name;
    public ParcelableValue value; //variables type to set
    ...

    
}

public class ParcelableValue implements Parcelable {
    ...
}

完整的实现见将 Parcelable 的子类写到另一个 Parcel

你也有writeValue但这仍然有一些条件:

  • 任何实现 Serializable 的对象(但请参阅 writeSerializable(Serializable) 以了解注意事项)。 请注意,所有以前的类型都有相对高效的写入包的实现; 必须依赖通用序列化方法效率低得多,应尽可能避免。*

有关完整列表,请参阅该方法的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM