Android中Intent傳遞自定義物件型別的資料
Android中Intent是用來實現元件之間的通訊的,可以在元件之間傳遞資料。可以傳遞一些基本型別的資料,也可以傳遞自定義物件型別的資料,但是如果要傳遞自定義型別的物件資料,這個自定義型別的物件必須是實現了Serializable介面或者是實現Parcelable介面。
1.實現Serializable介面的物件
實現Serializable介面非常簡單,Serializable介面中沒有需要實現的函 數。直接使用implements關健字即可,無需其他操作。
public class User implements Serializable{
private int id;
private String name;
public User(){
}
public User(int id,String name){
this.id=id;
this.name=name;
}
public void setId(int id ){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
上述程式碼就是定義了一個實現了Serializable介面的User物件,這個User物件就可以被Intent中傳遞。
傳遞該物件型別的資料
User user=new User(1,"張三");
intent.putExtra("user",user);
獲取該物件型別的資料
getIntent().getSerializableExtra ("user");
2.實現Parcelable介面的物件
實現Parcelable介面步驟:
(1)重寫describeContents方法,預設返回0就可以。
(2)重寫writeToParcel方法。
(3)例項化靜態內部類物件CREATOR
public class User implements Parcelable{
private int id;
private String name;
public User(){
}
public User(int id,String name){
this.id=id;
this.name=name;
}
public void setId(int id ){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
public int describeContents(){
return 0;
}
public void writeToParcel(Parcel out,int flags ){
out.writeInt(id);
out.writeString(name);
/* 一定要按照成員變數宣告的順序來打包資料(寫資料)*/
}
public static final Parcelable.Creaator<User>
CREATOR=new Parcelbale.Creator<User>(){
/*返回實現Parcelable介面的單個例項*/
public User createFromParcel(Parcel source){
User user=new User();
user.setId(source.readInt());
user.setName(source.readString());
return user;
/*一定要按照成員變數宣告的順序來讀資料*/
}
/*返回實現Parcelable介面的多個例項*/
public User[] newArray(int size){
return new User[size];
}
}
}
上述程式碼是定義了一個實現Parcelable介面的物件,這個User物件也可以被Intent傳遞。
傳遞物件型別的資料
User user=new User(1,"張三");
intent.putExtra("user",user);
獲取該物件型別的資料
getIntent().getParcelableExtra("user");
實際上讓物件實現Serializable介面和Parcelbale介面就是實現物件的序列化。
物件的序列化:把物件資料轉成位元組序列的過程就稱之為物件的序列化。
物件的反序列化:把位元組序列恢復成物件資料的過程就是反序列化。
物件序列化的目的:
(1)實現物件資料的持久化 ,就是把物件資料儲存到檔案、資料庫中。
(2)在網路中、程式內部以及程式間傳輸物件資料。
這兩種實現物件序列化方式的比較:
Parcelable的效能要比Serializable好,記憶體開銷小,一般用於記憶體間資料的傳輸。如Activity間資料的傳輸。
Serializable主要用於物件資料的持久化以及網路間物件資料的傳輸。