adnroid中的序列化(二)自定義類內部變量

對於基礎的String,int等java支持的Parcelable類,簡單寫一下寫入和讀取就可以了,對於含有成員是自己寫的Parcelable類有些不同,差別也不大。

代碼如下,定義個Parcelable類

package com.xue.qin.demo.myparcelableclass;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by xue.qin on 2017/6/5.
 */

public class MyObject implements Parcelable {
    private int n;
    private String name;

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public String getName() {
        return name;
    }

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

    public String getUseless() {
        return useless;
    }

    public void setUseless(String useless) {
        this.useless = useless;
    }

    private String useless;

    public MyObject(){
        n=0;
        name="default";
        useless="default";
    }




    public MyObject(int n, String name, String useless) {
        this.n = n;
        this.name = name;
        this.useless = useless;
    }

    public MyObject(Parcel source) {
        readFromParcel(source);
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(n);
        dest.writeString(name);
        dest.writeString(useless);
    }

    public void readFromParcel(Parcel source) {
        this.n = source.readInt();
        this.name = source.readString();
        this.useless = source.readString();
    }

    public static final Parcelable.Creator<MyObject> CREATOR = new Creator<MyObject>() {
        @Override
        public MyObject createFromParcel(Parcel source) {
            MyObject myObject2 = new MyObject(source);
            return myObject2;
        }

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

    @Override
    public String toString() {
        return "( n:" + n + " name:" + name + " useless:" + useless + " 地址:" + super.toString() + " )";
    }
}

另一Parcelable類包含上一個MyObject的成員

package com.xue.qin.demo.myparcelableclass;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by qinxue on 2018/4/4.
 */

public class OuterClassObj implements Parcelable {
    private String content;
    private MyObject myObject;

    private OuterClassObj(Parcel source) {
        content = source.readString();
        myObject = source.readParcelable(MyObject.class.getClassLoader());
    }

    public OuterClassObj(String content, MyObject myObject) {
        this.content = content;
        this.myObject = myObject;
    }

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(content);
        parcel.writeParcelable(myObject, i);
    }

    public static final Parcelable.Creator<OuterClassObj> CREATOR = new Creator<OuterClassObj>() {
        @Override
        public OuterClassObj createFromParcel(Parcel source) {
            OuterClassObj outerObj = new OuterClassObj(source);
            return outerObj;
        }

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

    @Override
    public String toString() {
        return " content: "+content + " myObject = "+myObject;
    }
}


大概就是這樣啦。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章