android parcelable序列化成字符串

参考: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
}

猜你喜欢

转载自blog.csdn.net/yhtppp/article/details/51307890