Android传递Object类型的List的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wu__di/article/details/80954720

日常的开发过程中,我们经常需要通过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");

猜你喜欢

转载自blog.csdn.net/wu__di/article/details/80954720