1、Intent传递基本数据类型
传递
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("key","value");
取出
String s=getIntent().getStringExtra("key");
还有一些其他的基本数据类型都可以以这样的形式传递获取,只需要在getStringExtra的地方将String换成对应数据类型就可以了,有几个方法可以带默认值,比如getIntent().getIntExtra(“number”,1);
2、Intent传递对象
而对象传递方式主要有以下两种
(1)实现Serializable接口implements Serializable,这种思想是通过序列化的方式,序列化就是让对象以流的形式存在,可以存储在本地,也可以在网络上传输。因为对象不能直接传输,所以就使用这种可传输的形式。但是效率对比实现Parcelable要低一些,使用要简单一些。
使用方式直接让待传递的对象实现Serializable接口 ,在Activity中读取的时候和基本数据类型的读取一样。
自己实现一个Person类
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
Person person=new Person();
person.setName("hahha");
person.setId(123);
intent.putExtra("Serializable",person);
startActivity(intent);
获取
Person person1=(Person)getIntent().getSerializableExtra("Serializable");
System.out.println(person1.getName());
(2) 也可以实现Parcelable思想是将对象分解成可以直接传输的基本数据类型进行传输
对比Serializable要复杂一些
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
private String name;
protected Person(Parcel in) {
name = in.readString();//读取
id = in.readInt();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);//写入
dest.writeInt(id);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private int id;
public void setName() {
}
}
因为要实现接口里的一些方法
首先是写入 writeToParcel() dest.writexxx()方法一一写入。 读取,采用in.readxxx(),要注意的是读取和写入顺序一定要一致。
describeContents() 一般返回0就行了
还有这个CREATOR ,创建了Parcelable.create的一种实现,重写 方法createFromParcel( newArray()只需要返回数组大小,要有泛型。
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
传递时候和Serializable使用一样,获取的时候
Person person1=(Person)getIntent().getParcelableExtra("Parcelable");