大家都知道2个Act之前传递对象数据,一般就是用Serializable或者Parcelable了,好处我就不说了,肯定是Parcelable好用就对了
先看下数据对象
public class Person implements Parcelable {
private String name;
private int age;
protected Person(Parcel in) {
name = in.readString();
age = 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];
}
};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static Creator<Person> getCREATOR() {
return CREATOR;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}
OK看下用法
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView mTvSvipPrice = findViewById(R.id.text);
mTvSvipPrice.setOnClickListener(this);
}
@Override
public void onClick(View v) {
ArrayList<Person> objects = new ArrayList<>();
Parcel parcel = Parcel.obtain();
Person testPaciBean = new Person(parcel);
testPaciBean.setAge(18);
testPaciBean.setName("我是第一个");
parcel.recycle();
Person testPaciBean2 = new Person(parcel);
testPaciBean2.setAge(20);
testPaciBean2.setName("我是第二个");
parcel.recycle();
objects.add(testPaciBean);
objects.add(testPaciBean2);
//传递单独对象
Intent intent = new Intent(this, MainActivity2.class);
intent.putExtra("JustBean", testPaciBean);
//传递List对象 坑就在这里了
//正确方式 最简单的方法
intent.putParcelableArrayListExtra("JustList", objects);
//坑在这里 注意下面这一句是错误的
intent.putExtra("JustList", objects);
//这样写也是错误的
startActivity(intent);
}
}
主要注意2点,第一个不能直接putExtra应该用putParcelableArrayListExtra,还有一个问题,这个传输是有最大限制的,如果传送的数据太大,我就把一个集合亏大10W呗,导致系统出错 :java.lang.RuntimeException: Failure from system
最后看下接收方
//取单个对象
Person justBean = getIntent().getParcelableExtra("JustBean");
//取一个集合对象
ArrayList<Person> justList = getIntent().getParcelableArrayListExtra("JustList");