当前位置:首页 > 编程笔记 > 正文
已解决

Android 实现Parcelable接口完成序列化

来自网友在路上 190890提问 提问时间:2023-09-18 23:33:28阅读次数: 90

最佳答案 问答题库908位专家为你答疑解惑

Parcelable接口是Android中用于实现对象序列化的一种机制,它比Java中的Serializable接口更高效。通过实现Parcelable接口,可以将自定义的对象在不同组件或进程之间进行传递。
要实现Parcelable接口,可以按照以下步骤进行操作:

  1. 在目标类中实现Parcelable接口,并重写以下方法:writeToParcel(Parcel dest, int flags)和describeContents()。

  2. 在构造函数中读取Parcel对象并赋值给类的成员变量。

  3. 创建一个名为CREATOR的静态Parcelable.Creator对象,并实现createFromParcel(Parcel in)和newArray(int size)方法。
    下面是一个示例,展示如何实现Parcelable接口:

    import android.os.Parcel;
    import android.os.Parcelable;import androidx.annotation.NonNull;import java.util.ArrayList;
    import java.util.List;public class TestBean implements Parcelable {public int id;public String name;public List<Integer> score;public List<List<String>> data;public Address address;protected TestBean(Parcel in) {id = in.readInt();name = in.readString();score = new ArrayList<>();in.readList(score, Integer.class.getClassLoader());data = new ArrayList<>();in.readList(data, List.class.getClassLoader());address = in.readParcelable(Address.class.getClassLoader());}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(id);dest.writeString(name);dest.writeList(score);dest.writeList(data);dest.writeParcelable(address, flags);}@Overridepublic int describeContents() {return 0;}public static final Creator<TestBean> CREATOR = new Creator<TestBean>() {@Overridepublic TestBean createFromParcel(Parcel in) {return new TestBean(in);}@Overridepublic TestBean[] newArray(int size) {return new TestBean[size];}};public static class Address implements Parcelable{public String city;public String road;protected Address(Parcel in) {city = in.readString();road = in.readString();}public static final Creator<Address> CREATOR = new Creator<Address>() {@Overridepublic Address createFromParcel(Parcel in) {return new Address(in);}@Overridepublic Address[] newArray(int size) {return new Address[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(@NonNull Parcel parcel, int i) {parcel.writeString(city);parcel.writeString(road);}}
    }
    

在上述代码中,TestBean类实现了Parcelable接口,并将其成员变量都包含在序列化过程中。
在构造函数protected TestBean(Parcel in)中,通过readInt()、readString()和readParcelable()等方法逐个读取传入的Parcel对象中的数据,并将它们赋值给类的成员变量。
在writeToParcel(Parcel dest, int flags)方法中,通过writeInt()、writeString()和writeParcelable()等方法将类的成员变量写入传入的Parcel对象中。
最后,通过静态的CREATOR对象实现了createFromParcel(Parcel in)和newArray(int size)方法,用于创建TestBean对象的实例和数组。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Android 实现Parcelable接口完成序列化":http://eshow365.cn/6-8962-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!