在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; // 人名
public int iSex; // 性別
public String iId; // 社會安全號碼碼
public String iMobileNumber; // 手機號碼
public String iEMailAddr; // 郵箱地址
// From Parcelable
@Override
public int describeContents()
{
return 0;
}
// From Parcelable
// 儲存到包裹中
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeString(iName);
dest.writeInt(iSex);
dest.writeString(iId);
dest.writeString(iMobileNumber);
dest.writeString(iEMailAddr);
}
// 實現Parcelable介面的類型中,必須有一個實現了Parcelable.Creator介面的靜態常量成員欄位,
// 並且它的名字必須為CREATOR的
public static final 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)
{
return new PersonInfo[size];
}
};
}
2. 定義一個公開的靜態成員變數,在不同的模組中都含有這個控制代碼,並且利用這個控制代碼來來實現在不同的模組之間傳遞資料的需求。