使用 Intent 传递对象

2016-05-12  本文已影响73人  TTTqiu

一、 Serializable 方式


1. 要使一个类的对象可序列化,只需要让这个类去实现 Serializable 这个接口就可以了。

比如说有一个 Person 类,其中包含了 name 和 age 这两个字段,想要将它序列化就可以这样写,这样所有的 Person 对象就都是可序列化的了

public class Person implements Serializable{  
    private String name;
    private int age;
    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;
    }
}
2. 传递序列化的对象。
Person person = new Person();
person.setName("Tom");
person.setAge(20);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person_data", person);
startActivity(intent);
3. 获取序列化的对象。
Person person = (Person) getIntent().getSerializableExtra("person_data");

二、Parcelable 方式


1. Parcelable 的实现方式。
public class Person implements Parcelable {
    private String name;
    private int age;
    ......

    @Override
    public int describeContents() {
        return 0;
    }

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

    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(); // 读取name
            person.age = source.readInt(); // 读取age
            return person;
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}
2. 传递对象。
Person person = new Person();
person.setName("Tom");
person.setAge(20);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person_data", person);
startActivity(intent);
3. 获取对象。
Person person = (Person) getIntent().getParcelableExtra("person_data");

3. 对比


Serializable 方式较为简单,但由于会把整个对象进行序列化,因此效率较低。所以在通常情况下还是更加推荐使用 Parcelable 方式来实现 Intent 传递对象的功能。

上一篇 下一篇

猜你喜欢

热点阅读