When passing an object between activities through an intent, the class of the object needs to implement Parcelable.
Interface for classes whose instances can be written to and restored from a Parcel
. Classes implementing the Parcelable interface must also have a non-null static field called CREATOR
of a type that implements the Parcelable.Creator
interface.
A typical implementation of Parcelable is:
public class MyParcelable implements Parcelable { private int mData; public int describeContents() { // generally return 0 return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(mData); } public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } public MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; private MyParcelable(Parcel in) { mData = in.readInt(); } }
http://developer.android.com/reference/android/os/Parcelable.html
The most important place is
private MyParcelable(Parcel in)
and
writeToParcel(Parcel out, int flags)
The read and write order must be consistent.
public class Bill implements Parcelable { Integer fee; String title; Boolean result; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(fee); out.writeString(title); out.writeByte((byte) (result!=null && result ? 1 : 0)); } public static final Parcelable.Creator<Bill> CREATOR = new Parcelable.Creator<Bill>() { public Bill createFromParcel(Parcel in) { return new Bill(in); } public Bill[] newArray(int size) { return new Bill[size]; } }; private Bill(Parcel in) { fee = in.readInt(); title = in.readString(); result = (in.readByte()==1); } }