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");