我们在Intent传递传递对象。能够有三种方式,实现Serializable接口、实现Parcelable接口,使用json格式序列化与反序列化。
在此我们使用第二方式,现实Parcelable接口,实现Parcelable须要下面操作。
1.writeToParcel 方法:该方法将类的数据写入外部提供的Parcel中。
2.describeContents 方法:返回内容描写叙述信息的资源ID。
3.静态的Parcelable.Creator接口,本接口有下面方法双方法:
3.1 createFormParcel(Parcel in):实现从parcle实例中创建出类的实例的功能。
3.2 newArray(int size): 创建一个类型为T。长度为size的数组。
样例1:User 对象创建
public class User implements Parcelable{ private Integer userId; private String userName; @Override public int describeContents() { return 0; } /** * 注意:序列化与反序列化顺序必需要一样 * @param parcel */ public User(Parcel source){ this.userId =source.readInt(); this.userName = source.readString(); } public User(Integer userId, String userName) { super(); this.userId = userId; this.userName = userName; } /** * 序列化 */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.userId); dest.writeString(this.userName); } public static Parcelable.Creator<User> CREATOR=new Parcelable.Creator<User>() { /** * 反序列化 */ @Override public User createFromParcel(Parcel source) { return new User(source); } @Override public User[] newArray(int size) { return new User[size]; } };
样例2:UserMode
ublic class UserMode implements Parcelable{ private List<User> users=new ArrayList<User>(); public UserMode(){}; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(users); } public UserMode(Parcel source){ //须要创建一个集合,进行反序列化 users = new ArrayList<User>(); source.readList(users, getClass().getClassLoader()); } public static Parcelable.Creator<UserMode> CREATOR =new Creator<UserMode>() { @Override public UserMode[] newArray(int size) { return new UserMode[size]; } @Override public UserMode createFromParcel(Parcel source) { return new UserMode(source); } }; }