adnroid中的序列化(二)自定义类内部变量

本文详细介绍了如何在 Android 中实现 Parcelable 接口以进行对象序列化和反序列化,包括基本类型的处理方法及自定义 Parcelable 类的过程。同时展示了如何在含有自定义 Parcelable 成员的类中实现 Parcelable。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于基础的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;
    }
}


大概就是这样啦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值