Android中使用Intent來啟動Android的組件,而且在啟動Android中的組件的時候可以使用Intent攜帶并傳遞數據。如:
Intent intent=new Intent(MainActivity.this,AnotherActivity.class); intent.putExtra("per_age",20); startActivity(intent);但是當使用Intent的putExtra()方法來傳遞數據的時候,只能傳遞基本類型的數據,無法傳遞對象類型的數據。為了保證Intent可以傳遞對象類型的數據我們可以采取兩種方式,實體類實現Serializable接口和實體類實現Parcelable接口。 Serializable方式: Serializable方式指的是序列化方式,而 java的對象序列化是指將那些實現了Serializable接口的對象轉換成一個字符序列,并能夠在以后將這個字節序列完全恢復為原來的對象。 Serializable是一個聲明式的接口,沒有任何需要實現的抽象方法,因此當需要將對象序列化的時候,只需要實體類簡單的實現一下接口就行。
/** * Created by BeautifulSoup on 2017/2/9. */public class Person implements Serializable{ PRivate String name; private Integer age; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '/'' + ", age=" + age + '}'; }}實際操作:
Person person=new Person("BeautifulSoup",20); Intent intent=new Intent(MainActivity.this,AnotherActivity.class); intent.putExtra("per",person); startActivity(intent);在目標Activity中得到傳遞的數據:
Person person=(Person)getIntent().getParcelableExtra("per");此種方式十分簡單,但是效率不高,因此實際操作中我們通常使用Parcelable方式。
Parcelable方式: Parcelable方式的原理是將一個完整的對象進行分解,從而將完整的對象分解成intent可以傳遞的基本類型的數據。 基本使用的方式就是實體類實現Parcelable接口,重寫接口未實現的方法。 其中describeContents方法的返回值一般是0,writeToParcel方法中將對象中的數據寫出。 此外,我們還需要在實體類中提供一個CREATOR的常量。在匿名類中將寫出的字段依次的讀入即可。
/** * Created by BeautifulSoup on 2017/2/9. */public class User implements Parcelable { private String name; private Integer age; private String address; private String phone; protected User() { } public User(String name, Integer age, String address, String phone) { this.name = name; this.age = age; this.address = address; this.phone = phone; } //省略getter與setter... public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { User user=new User(); user.name=in.readString(); user.age=in.readInt(); user.address=in.readString(); user.phone=in.readString(); return user; } @Override public User[] newArray(int size) { return new User[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(name); parcel.writeInt(age.intValue()); parcel.writeString(address); parcel.writeString(phone); } @Override public String toString() { return "User{" + "name='" + name + '/'' + ", age=" + age + ", address='" + address + '/'' + ", phone='" + phone + '/'' + '}'; }} User user=new User("BeautifulSoup",20,"山東","17811111111"); Intent intent=new Intent(MainActivity.this,AnotherActivity.class); intent.putExtra("user",user); startActivity(intent);在目標Activity中得到傳遞的數據:
User user=(User)getIntent().getParcelableExtra("user");新聞熱點
疑難解答