在android提供了一種類型:Parcel。被用作封裝資料的容器,封裝後的資料可以透過Intent或IPC傳遞。 除了基本型別以外,只有實作了Parcelable介面的類別才能被放入Parcel中。
Parcelable實現重點:需要實現三個東西
1)writeToParcel 方法。此方法將類別的資料寫入外部提供的Parcel中.聲明如下:
writeToParcel (Parcel dest, int flags) 具體參數意義請參考javadoc
2)describeContents方法。沒搞懂有什麼用,反正直接回0也可以
3)靜態的Parcelable.Creator介面。本介面有兩個方法:
createFromParcel(Parcel in) 實作從in中建立出類別的實例的功能
newArray(int size) 建立一個類型為T,長度為size的數組,只有一句話(return new T[size])即可。估計本方法是供外部類別反序列化本類數組使用。
測試用的接收訊息Activity:
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; public class Test extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreateStates(Statea) ; setContentView(R.layout.main); Intent i = getIntent(); Person p = i.getParcelableExtra("yes"); System.out.println("---->"+p.name); System.out.println("----> "+p.map.size()); } }
發送的Activity:
import java.util.HashMap; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class TestNew extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onC. ; setContentView(R.layout.main); Intent intent = new Intent(); Person p = new Person(); p.map = new HashMap<String,String>(); p.map.put("yes", "ido"); p.name=" ok"; intent.putExtra("yes", p); intent.setClass(this, Test.class); startActivity(intent); } }
Parcelable的實作類別:
import java.util.HashMap; import android.os.Parcel; import android.os.Parcelable; public class Person implements Parcelable { public HashMap<String,String> map = new HashMap<String,String> (); public String name ; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeMap(map); dest.writeString(name); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //重寫Creator @Override public Person createFromParcel(Parcel source) { Person p = new Person(); p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; } @Override public Person[] newArray(int size) { // TODO Auto-generated method stub return null; } }; }