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");