1. 程式人生 > >使用Intent傳遞物件(兩種)

使用Intent傳遞物件(兩種)

說明

平常我們可以在Intent中新增一些資料,帶到下一個介面,就像這樣

/*在第一個頁面把資料裝進Intent*/
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("data1","hello");
intent.putExtra("data2","world");
startActivity(intent);
/*在第二個頁面拿到資料*/
getIntent().getStringExtra("data1");
getIntent().getStringExtra
("data2");

這樣沒有什麼問題,但是PutExtra所能支援的資料型別是有限的,如果你想傳遞一個自定義物件,是不支援的。

使用Intent來傳遞物件通常有2種實現方式:SerializableParceable

Serializable(第一種)

Serializable是序列化的意思,表示將一個物件轉換成可儲存或可傳輸的狀態。序列化後的物件可以在網路上進行傳輸,也可以儲存到本地.序列化的方法很簡單,實現Serializable介面就可以了.

1.比如有個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; } }

接下來在FirstActivity使用就非常簡單了

Person person = new Person();
person.setName("Tom");
person.setAge(18);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person1",person);
startActivity(intent);

在SecondActivity取出物件

序列化物件向下轉型為Person物件

Person person=(Person)getIntent().getSerializableExtra("person1");

Parceable(第二種)

不同於將物件序列化.Parceable是將一個完整的物件進行分解,而分解後的每一部分都是Intent所支援的資料型別.

Person類實現Parcelable 介面

public class Person implements Parcelable {
    private String name;
    private int age;

    public Person() {

    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            Person person = new Person();
            person.name=in.readString();
            person.age=in.readInt();
            return person;
        }

        @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(age);
    }
}