zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    ----Vue 单页应用的首屏优化----
    ----小程序之rich-text图片宽度自适应----
    ----vue-router 如何在新窗口打开页面----
    ----element-ui实现时间控件开始时间和结束时间关联----
    ----element-ui自定义表单验证----
    ----js中的every和some----
    「Linux学习」之挂载访问samba服务
    「Linux学习」之samba和nfs共享服务搭建
    「Linux学习」之防火墙服务设置
    「linux学习」之批量创建用户脚本
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5318236.html
Copyright © 2011-2022 走看看