Android中使用Intent来启动Android的组件,而且在启动Android中的组件的时候可以使用Intent携带并传递数据。如:
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
intent.putExtra("per_age",20);
startActivity(intent);
但是当使用Intent的putExtra()方法来传递数据的时候,只能传递基本类型的数据,无法传递对象类型的数据。为了保证Intent可以传递对象类型的数据我们可以采取两种方式,实体类实现Serializable接口和实体类实现Parcelable接口。
Serializable方式:
Serializable方式指的是序列化方式,而 Java的对象序列化是指将那些实现了Serializable接口的对象转换成一个字符序列,并能够在以后将这个字节序列完全恢复为原来的对象。
Serializable是一个声明式的接口,没有任何需要实现的抽象方法,因此当需要将对象序列化的时候,只需要实体类简单的实现一下接口就行。
/**
* Created by BeautifulSoup on 2017/2/9.
*/
public class Person implements Serializable{
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
实际操作:
Person person=new Person("BeautifulSoup",20);
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
intent.putExtra("per",person);
startActivity(intent);
在目标Activity中得到传递的数据:
Person person=(Person)getIntent().getParcelableExtra("per");
此种方式十分简单,但是效率不高,因此实际操作中我们通常使用Parcelable方式。
Parcelable方式:
Parcelable方式的原理是将一个完整的对象进行分解,从而将完整的对象分解成intent可以传递的基本类型的数据。
基本使用的方式就是实体类实现Parcelable接口,重写接口未实现的方法。
其中describeContents方法的返回值一般是0,writeToParcel方法中将对象中的数据写出。
此外,我们还需要在实体类中提供一个CREATOR的常量。在匿名类中将写出的字段依次的读入即可。
/**
* Created by BeautifulSoup on 2017/2/9.
*/
public class User implements Parcelable {
private String name;
private Integer age;
private String address;
private String phone;
protected User() {
}
public User(String name, Integer age, String address, String phone) {
this.name = name;
this.age = age;
this.address = address;
this.phone = phone;
}
//省略getter与setter...
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
User user=new User();
user.name=in.readString();
user.age=in.readInt();
user.address=in.readString();
user.phone=in.readString();
return user;
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeInt(age.intValue());
parcel.writeString(address);
parcel.writeString(phone);
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
User user=new User("BeautifulSoup",20,"山东","17811111111");
Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
intent.putExtra("user",user);
startActivity(intent);
在目标Activity中得到传递的数据:
User user=(User)getIntent().getParcelableExtra("user");