Android传递Object类型的List的用法


日常的开发过程中,我们经常需要通过Intent和Binder传输数据,Object 类型不能直接传递,需要通过序列化。序列化是将对象状态转换为可保持或传输的格式,包括Parcelable和Serializable两种方式。

1.Object序列化
1)使用Serializable方式
public class SerInfo implements Serializable {

    private static final long serialVersionUID = 8711368826010013025L;

    private String Id;

    private String Name;

    public SerInfo(String id, String name){
        Id = id;
        Name = name;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}
2)使用Parcelable方式
public class ParInfo implements Parcelable {
    private String Id;;
    private String Name;

    public ParInfo(){

    }
    public ParInfo(String id, String name){
        Id = id;
        Name = name;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    //该方法将类的数据写入外部提供的Parcel中。
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Id);
        dest.writeString(Name);
    }

    public static final Parcelable.Creator<ParInfo> CREATOR  = new Creator<ParInfo>() {
        //实现从source中创建出类的实例的功能
        @Override
        public ParInfo createFromParcel(Parcel source) {
            ParInfo parInfo  = new ParInfo();
            parInfo.Id = source.readString();
            parInfo.Name= source.readString();
            return parInfo;
        }
        //创建一个类型为T,长度为size的数组
        @Override
        public ParInfo[] newArray(int size) {
            return new ParInfo[size];
        }
    };

}
2.Serializable与Parcelable的区别

Serializable是Java中的序列化接口,使用简单但是开销略大,序列化和反序列化过程需要大量I/O操作。

Parcelable是Android系统中的序列化方式,相比较更适用于Android平台,缺点就是使用起来相对麻烦,优点是效率很高。因此在用于Intent间的数据传递时我们要首选Parcelable。

Parcelable主要用在内存序列化上,通过Parcelable将对象持久化到存储设备中,或者将对象序列化后通过网络传输,该过程稍微复杂,因此建议大家使用Serializable方式进行序列化可能效率会更高。

3.传递List<Object>的方法
ArrayList<SerInfo> listObj = new ArrayList<SerInfo>();

SerInfo serInfo1 = new SerInfo(id1,name1);

SerInfo serInfo2 = new SerInfo(id2, name2);

listObj.add(serInfo1);

listObj.add(serInfo2);

Intent intent = new Intent();

intent.setClass(MainActivity.this, XXX.class);

intent.putExtra("listobj", (Serializable) listObj);

startActivity(intent);
4.接收List<Object>的方法
ArrayList<SerInfo> listObj =  (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj");

日常的开发过程中,我们经常需要通过Intent和Binder传输数据,Object 类型不能直接传递,需要通过序列化。序列化是将对象状态转换为可保持或传输的格式,包括Parcelable和Serializable两种方式。

1.Object序列化
1)使用Serializable方式
public class SerInfo implements Serializable {

    private static final long serialVersionUID = 8711368826010013025L;

    private String Id;

    private String Name;

    public SerInfo(String id, String name){
        Id = id;
        Name = name;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }
}
2)使用Parcelable方式
public class ParInfo implements Parcelable {
    private String Id;;
    private String Name;

    public ParInfo(){

    }
    public ParInfo(String id, String name){
        Id = id;
        Name = name;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    //该方法将类的数据写入外部提供的Parcel中。
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Id);
        dest.writeString(Name);
    }

    public static final Parcelable.Creator<ParInfo> CREATOR  = new Creator<ParInfo>() {
        //实现从source中创建出类的实例的功能
        @Override
        public ParInfo createFromParcel(Parcel source) {
            ParInfo parInfo  = new ParInfo();
            parInfo.Id = source.readString();
            parInfo.Name= source.readString();
            return parInfo;
        }
        //创建一个类型为T,长度为size的数组
        @Override
        public ParInfo[] newArray(int size) {
            return new ParInfo[size];
        }
    };

}
2.Serializable与Parcelable的区别

Serializable是Java中的序列化接口,使用简单但是开销略大,序列化和反序列化过程需要大量I/O操作。

Parcelable是Android系统中的序列化方式,相比较更适用于Android平台,缺点就是使用起来相对麻烦,优点是效率很高。因此在用于Intent间的数据传递时我们要首选Parcelable。

Parcelable主要用在内存序列化上,通过Parcelable将对象持久化到存储设备中,或者将对象序列化后通过网络传输,该过程稍微复杂,因此建议大家使用Serializable方式进行序列化可能效率会更高。

3.传递List<Object>的方法
ArrayList<SerInfo> listObj = new ArrayList<SerInfo>();

SerInfo serInfo1 = new SerInfo(id1,name1);

SerInfo serInfo2 = new SerInfo(id2, name2);

listObj.add(serInfo1);

listObj.add(serInfo2);

Intent intent = new Intent();

intent.setClass(MainActivity.this, XXX.class);

intent.putExtra("listobj", (Serializable) listObj);

startActivity(intent);
4.接收List<Object>的方法
ArrayList<SerInfo> listObj =  (ArrayList<SerInfo>) getIntent().getSerializableExtra("listobj");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

充电实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值