Intent來傳遞對象

使用Intent來傳遞對象通常有兩種方式,Serializable和Parcelable

一、Serializable方式

序列化,表示將一個對象轉換成可存儲或可傳輸的狀態。序列化後的對象可以在網絡上進行傳輸,也可以存儲到本地。序列化的方法就是讓一個類去實現Serializable接口。

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(20);
		
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person_data", person);
startActivity(intent);

在SecondActivity中的代碼

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



二、Parcelable方式

原理是將一個完整的對象進行分解,而分解後的每一部分都是Intent所支持的數據類型。

public class Person implements Parcelable{
	
	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;
	}

	@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];
		}
	};
	
	
	
}
在ScondeActivity中的代碼

Person person = (Person) getIntent().getParcelableExtra("Person_data");



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章