首页 > 代码库 > Intent传递简单对象与集合

Intent传递简单对象与集合

我们在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);
		}
	};
 }


源代码下载