在Android應用的開發中,如果我們需要在不同的模塊(比如不同的Activity之間)之間傳遞數據,通常有以下兩種方法:
1. 利用Intent對象攜帶數據
通過查詢Intent/Bundle的API文檔,我們可以獲知,Intent/Bundle支持傳遞基本類型的數據和基本類型的數組數據,以及String/CharSequence類型的數據和String/CharSequence類型的數組數據。
而對於其它類型的數據貌似無能為力,其實不然,我們可以在Intent/Bundle的API中看到Intent/Bundle還可以傳遞Parcelable(包裹化,郵包)和Serializable(序列化)類型的數據,以及它們的數組/列表數據。
所以要讓非基本類型和非String/CharSequence類型的數據通過Intent/Bundle來進行傳輸,我們就需要在數據類型中實現Parcelable接口或是Serializable接口。
1.1 利用Parcelable接口實現數據通過Intent/Bundle進行傳遞
/** * 代表一個人的信息 * @author gansc */ public class PersonInfo implements Parcelable { public String iName; // 人名 publicint iSex; // 性別 public String iId; // 身份證號碼 public String iMobileNumber; // 手機號碼 public String iEMailAddr; // 郵箱地址 // From Parcelable @Override publicint describeContents() { return0; } // From Parcelable // 保存到包裹中 @Override publicvoid writeToParcel(Parcel dest, int flags) { dest.writeString(iName); dest.writeInt(iSex); dest.writeString(iId); dest.writeString(iMobileNumber); dest.writeString(iEMailAddr); } // 實現Parcelable接口的類型中,必須有一個實現了Parcelable.Creator接口的靜態常量成員字段, // 並且它的名字必須為CREATOR的 publicstaticfinal Parcelable.Creator<PersonInfo> CREATOR =new Parcelable.Creator<PersonInfo>() { // From Parcelable.Creator @Override public PersonInfo createFromParcel(Parcel in) { PersonInfo brief =new PersonInfo(); // 從包裹中讀出數據 brief.iName = in.readString(); brief.iSex = in.readInt(); brief.iId = in.readString(); brief.iMobileNumber = in.readString(); brief.iEMailAddr = in.readString(); return brief; } // From Parcelable.Creator @Override public PersonInfo[] newArray(int size) { returnnew PersonInfo[size]; } }; }