使用Intent传递对象(Serializable,Parcelable)

Intent在启动活动、发送广播、启动服务时都可以添加一些附加数据(常用的数据类型都支持,但是自定义的对象就不行)

Intent intent=new Intent(MainActivity.this,Second.class);
intent.putExtra("string_data","hello");
intent.putExtra("int_data",100);
startActivity(intent);
getIntent.getStringExtra("string_data");
getIntent.getIntExtra("int_data");

使用Intent来传递对象通常有两种方法Serializable(序列化)和Parcelable

Serializable(序列化)

序列化后的对象可传输、可存储。
实现方法:只需要让一个类实现Serializable接口(无需具体实现借口方法)就行。
传输:intent.putExtra(“person_data”,person);
获取:Person person=(Person)getIntent().getSerializableExtra(“person_data”);

Parcelable

Serializable是将对象序列化,而Parcelable是将对象进行分解,分解后每一部分都是Intent所支持的对象
实现方法:让一个类实现Parcelable接口必须 重写describeContents()writeToParcel(Parcel dest,int flags) 方法。
describeContents()直接放回0就行

@Override
public int describeContents(){
	return 0;
}
@Override
public void writeToParcel(Parcel dest,int flags){
	dest.writeString(name);//写出数据
	dest.writeInt(age);
}

读取数据则必须还在Person类里提供一个CREATOR常量,并在常量类里重写两个方法

public static final Parcelable.Creator<Person> CREATOR=new Parcelable.Creator<Person>(){
		@Override
		public Person createFromParcel(Parcel source){
			Person person=new Person();
			person.name=source.readString();//这里读取的顺序必须和刚才写出的顺序完全相同
			person.age=readInt();
			return person;
		}
		@Override
		public Person[] newArray(int size){
			return new Person[size];
		}
}

获取对象

Person person=(Person)getIntent().getParcelableExtra("person_data");

猜你喜欢

转载自blog.csdn.net/qq_42403295/article/details/88751059