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");新闻热点
疑难解答