zoukankan      html  css  js  c++  java
  • 使用Intent传递对象(两种)

    转:https://blog.csdn.net/weixin_37418246/article/details/80739882

    说明

    平常我们可以在Intent中添加一些数据,带到下一个界面,就像这样

    /*在第一个页面把数据装进Intent*/
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("data1","hello");
    intent.putExtra("data2","world");
    startActivity(intent);
    /*在第二个页面拿到数据*/
    getIntent().getStringExtra("data1");
    getIntent().getStringExtra("data2");

    这样没有什么问题,但是PutExtra所能支持的数据类型是有限的,如果你想传递一个自定义对象,是不支持的。

    使用Intent来传递对象通常有2种实现方式:Serializable和Parceable

    Serializable(第一种)

    Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地.序列化的方法很简单,实现Serializable接口就可以了.

    1.比如有个Person类

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

    在SecondActivity取出对象

    序列化对象向下转型为Person对象

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

    Parceable(第二种)

    不同于将对象序列化.Parceable是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型.

    Person类实现Parcelable 接口

    public class Person implements Parcelable {
        private String name;
        private int age;
    
        public Person() {
    
        }
    
        public static final Creator<Person> CREATOR = new Creator<Person>() {
            @Override
            public Person createFromParcel(Parcel in) {
                Person person = new Person();
                person.name=in.readString();
                person.age=in.readInt();
                return person;
            }
    
            @Override
            public Person[] newArray(int size) {
                return new Person[size];
            }
        };
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
        }
    }
  • 相关阅读:
    华为S570028TPLIAC 快速清除接口配置
    【银河麒麟操作系统V10】【服务器】 创建bond
    VMware Horizon 组件如何组成在一起
    Horizon桌面部署问题总结
    overlay网络技术之VxLAN详解
    Brocade 光纤交换机级联配置
    nginx反向代理400绕过学习
    dbeaver:可以作为简单报表、报警等用途的强大sql ide工具
    linuxpython2.x:安装cx_Oracle包:从最初、最原始的发行版状态:不依赖pip
    Linux 网卡限速:wondershaper 1.4.1@20211111:这是当前的最新版
  • 原文地址:https://www.cnblogs.com/CipherLab/p/14210876.html
Copyright © 2011-2022 走看看