参考:http://stackoverflow.com/questions/18000093/how-to-marshall-and-unmarshall-a-parcelable-to-a-byte-array-with-help-of-parcel
1、
private void test() {
List<String> families = new ArrayList<String>();
families.add("aaa");
families.add("bbb");
String str = object2String(new Student("haha", families));
Student stu = unmarshall(str, Student.CREATOR);
Log.i(TAG, "stu:" + stu.toString());
}
private String object2String(Parcelable stu) {
// 1.序列化
Parcel p = Parcel.obtain();
stu.writeToParcel(p, 0);
byte[] bytes = p.marshall();
p.recycle();
// 2.编码
String str = Base64.encodeToString(bytes, Base64.DEFAULT);
return str;
}
public static Parcel unmarshall(byte[] bytes) {
Parcel parcel = Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0); // this is extremely important!
return parcel;
}
public static <T> T unmarshall(String str, Parcelable.Creator<T> creator) {
// 1.解码
byte[] bytes = Base64.decode(str, Base64.DEFAULT);
// 2.反序列化
Parcel parcel = unmarshall(bytes);
return creator.createFromParcel(parcel);
}
2、
public class Student implements Parcelable {
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel p) {
return new Student(p);
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeList(families);
}
private String name;
private List<String> families;
public Student() {
}
public Student(String name, List<String> families) {
this.name = name;
this.families = families;
}
public Student(Parcel parcel) {
name = parcel.readString();
families = parcel.readArrayList(List.class.getClassLoader());// TODO
}
// ... getter setter
}