Android--Intent传递对象

  Intent 传递对象通常有两种实现方式,Serializable 和 Parcelable;

一、Serializable:序列化,表示将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上进行传输,也可以存储到本地。这里实现了 Serializable 接口的类就可以通过 Intent 传递了;

--发起方传递对象:调用 Intent 的 putExtra() 即可;

1 Person person = new Person();
2 person.setName("Tom");
3 person.setAge(20);
4 Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
5 intent.putExtra("person_data", person);
6 startActivity(intent);

  --接收对象:需要调用 Intent 的 getSerializableExtra() 方法来获取实现了序列化的对象;

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

二、Parcelable:Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent 所支持的数据类型:

  --需要传递的对象在实现了 Parcelable 接口之后,需要重写如下方法并添加静态变量:

    1)describeContents():一般返回 0 就可以;

    2)writeToParcel(): 需要调用 Parcel 的writeXxx() 方法将类中的字段一一写出,如 writeInt()、writeString()等;

    3)CREATOR:创建的一个 Parcelable.Creator<T> 接口的实现,其内部需要重写 createFromParcel() 和 newArray() 方法;在createFromParcel()方法中需要去读取刚刚写入的字段,然后创建对应的对象并返回,读取的方法为 readXxx(),读取的顺序一定要和刚才写出的顺序完全相同; newArray()方法只需要new 出一个对象数组并返回;

  --例:

 1 public class Person implements Parcelable {
 2     private String name;
 3     private int age;
 4     ……
 5     @Override
 6     public int describeContents() {
 7         return 0;
 8     }
 9     @Override
10     public void writeToParcel(Parcel dest, int flags) {
11         dest.writeString(name); // 写出name
12         dest.writeInt(age); // 写出age
13     }
14     public static final Parcelable.Creator<Person> CREATOR = new     Parcelable.Creator<Person>() {
15         @Override
16         public Person createFromParcel(Parcel source) {
17             Person person = new Person();
18             person.name = source.readString(); // 读取name
19             person.age = source.readInt(); // 读取age    
20             return person;
21         }
22         @Override
23         public Person[] newArray(int size) {
24             return new Person[size];
25         }
26     };
27 }

  --Intent 中传递的方法与 Serializable 方式一样;

  --接收对象则通过 Intent 的 getParcelableExtra() 来获取;

1 Person person = (Person) getIntent().getParcelableExtra("person_data");

 

posted on 2016-03-25 09:22  _taoGe  阅读(193)  评论(0编辑  收藏  举报