Android 序列化模板

325 阅读1分钟

序列化方式

  1. implements Serializable
  2. implements Parcelable

Serializable 模板

一般继承 Serializable 就行了

public class SerializableBean implements Serializable {

}

Parcelable 模板

ParcelableBean

public class ParcelableBean implements Parcelable {
    
    private int id;
    private String answer;
    public ParcelableChlidBean parcelableObjiect;
    public ParcelableChlidBean[] parcelableArray;
    public List<ParcelableChlidBean> parcelableList;
    public String[] stringArray;
    
    protected ParcelableBean() {
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(answer);
        dest.writeParcelable(parcelableObjiect, flags);
        dest.writeParcelableArray(parcelableArray, flags);
        dest.writeTypedList(parcelableList);
        dest.writeStringArray(stringArray);
    }

    protected ParcelableBean(Parcel in) {
        id = in.readInt();
        answer = in.readString();
        parcelableObjiect = in.readParcelable(ParcelableChlidBean.class.getClassLoader());

        Parcelable[] parcelables = in.readParcelableArray(ParcelableChlidBean.class.getClassLoader());
        if (parcelables != null) {
            parcelableArray = Arrays.copyOf(parcelables,
                    parcelables.length, ParcelableChlidBean[].class);
        }

        // 注: readTypedList(List<PhotoImageItem> list,
        // Creator<PhotoImageItem> c),这里 list不能为空,
        // 否则回报 NullPointException
        if (parcelableList == null) {
            parcelableList = new ArrayList<ParcelableChlidBean>();
        }
        in.readTypedList(parcelableList, ParcelableChlidBean.CREATOR);
        // 注:这里为什么是parcel.createStringArray()
        // 而不是 parcel.readStringArray(selectedImage)?
        stringArray = in.createStringArray();
    }

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

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

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


}

ParcelableChlidBean

import android.os.Parcel;
import android.os.Parcelable;
 
public class ParcelableChlidBean implements Parcelable {

    private long id;
    private int age;
    private String name;
    private byte hasChlid;//不支持boolean
    private float height;
    private double money;
    private int[] houseNo;

    protected ParcelableChlidBean() {
    }

    protected ParcelableChlidBean(Parcel in) {
        this.id = in.readLong();
        this.age = in.readInt();
        this.name = in.readString();
        this.hasChlid = in.readByte();
        this.height = in.readFloat();
        this.money = in.readDouble();
        in.readIntArray(this.houseNo);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
        dest.writeInt(age);
        dest.writeString(name);
        dest.writeByte(hasChlid);
        dest.writeFloat(height);
        dest.writeDouble(money);
        dest.writeIntArray(houseNo);
    }
    
    public static final Creator<ParcelableChlidBean> CREATOR = new Creator<ParcelableChlidBean>() {
        @Override
        public ParcelableChlidBean createFromParcel(Parcel in) {
            return new ParcelableChlidBean(in);
        }

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

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

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isHasChlid() {
        return hasChlid == 1;
    }

    public void setHasChlid(boolean hasChlid) {
        if (hasChlid) {
            this.hasChlid = 1;
        } else {
            this.hasChlid = 0;
        }
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public int[] getHouseNo() {
        return houseNo;
    }

    public void setHouseNo(int[] houseNo) {
        this.houseNo = houseNo;
    }
}