您的位置:首页 > 其它

Serializable 和 Parcelable两种方式传递对象

2016-03-09 22:14 337 查看
Serializable方式相对而言比较简单些。只是简单的实现Serialiazable接口,然后从中根据字段读取就行了。

public class Person implements Serializable {
private String name;
private int age;

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

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

public Person(String xiaohong, int i) {
name = xiaohong;
age = i;
}

}


在程序中传递

Intent intent = new Intent(this, SecondActivity.class);
Person person = new Person("xiaohong", 20);
intent.putExtra("data", person);
startActivity(intent);


在另一个程序中SecondActivity接收

Person person = (Person) intent.getSerializableExtra("data");
tv_show.setText(person.getName() + ":" + person.getAge());


第二种:Parcelable方式相对比较复杂,下面直接贴上代码,注意注释。

//首先实现Parcelable接口
public class Student implements Parcelable {
private String name;
private int age;

//一般都是直接返回0
@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);//写入name字段
dest.writeInt(age);//写入age字段

}

public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {
@Override
public Student createFromParcel(Parcel source) {
Student student = new Student();
student.name = source.readString();//从刚才的Parcel对象中读取相应的字段存放到相应的对象中
student.age = source.readInt();
return student;
}

@Override
public Student[] newArray(int size) {
return new Student[size];//返回size大小的对象数组
}
};

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

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


然后就是传递数据

Intent intent = new Intent(this, SecondActivity.class);
Student student = new Student();
student.setName("glc");
student.setAge(21);
intent.putExtra("data", student);
startActivity(intent);


最后读取信息

Intent intent = getIntent();
Student student = intent.getParcelableExtra("data");
tv_show.setText(student.getName() + ":" + student.getAge());


问题来了,我们在这两种情况下,我们需要选择哪一种,一般来说,Serializable是属于Java中的序列化接口,而Parcelable是android上的序列化方式,并且Serializable是序列化整个对象,而Parcelable是将对象拆分成单独的对象进行序列化,因此,首选是Parcelable方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: