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);
        }
    }
  • 相关阅读:
    SVN服务器使用和搭建
    jenkins以.war包安装配置教程
    Django数据库与程序交互
    工作中常用到的linux命令
    js获取元素属性
    Jenkins利用插件持续集成的思路及安装
    web前端面试第一次[javascript函数和方法的区别]
    web前端面试第一次[定时器]
    linux卸载mysql
    mysql启动错误:Starting MySQL... ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
  • 原文地址:https://www.cnblogs.com/CipherLab/p/14210876.html
Copyright © 2011-2022 走看看