美文网首页程序员Android开发经验谈Android技术知识
说说如何使用 Android 中的 Intent 来传递类对象

说说如何使用 Android 中的 Intent 来传递类对象

作者: deniro | 来源:发表于2018-11-03 18:51 被阅读28次

    使用 Intent 来传递对象有两种方式:Serializable 和 Parcelable。

    1 Serializable 方式

    假设有一个 POJO 的 Account 类,该类实现了 Serializable 接口:

    public class Account implements Serializable {
    
        //姓名
        private String name;
    
        //密码
        private String pwd;
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        @Override
        public String toString() {
            return "Account{" +
                    "name='" + name + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
    
    

    Serializable 表示将一个对象转化为可储存或可传输的状态。序列化的对象即可在网络上传输也可存储到本地。希望将一个类序列化,我们只需要实现 Serializable 接口(标记接口)就好咯O(∩_∩)O~

    在 MainActivity 中设置 Account 对象:

    Account account = new Account();
    account.setName("deniro");
    account.setPwd("ew23408");
    Intent intent = new Intent(MainActivity.this, NextActivity.class);
    intent.putExtra("account", account);
    startActivity(intent);
    

    这里我们把 account 直接传入 Intent 的 putExtra() 方法。

    在 NextActivity 中获取 Account 对象:

    Account account=(Account)getIntent().getSerializableExtra("account");
    Log.d(TAG, "account: "+account);
    

    输出结果:

    D/NextActivity: account: Account{name='deniro', pwd='ew23408'}

    2 Parcelable 方式

    Parcelable 方式会对对象进行分解,这样分解后的每一部分都是 Intent 所支持的数据类型,通过这种方式就可以实现传递对象的功能咯O(∩_∩)O~

    public class Account2 implements Parcelable {
    
        //姓名
        private String name;
    
        //密码
        private String pwd;
    
        public Account2() {
        }
    
        public static final Creator<Account2> CREATOR = new Creator<Account2>() {
            @Override
            public Account2 createFromParcel(Parcel in) {
                Account2 entity = new Account2();
                entity.name = in.readString();
                entity.pwd = in.readString();
                return entity;
            }
    
            @Override
            public Account2[] newArray(int size) {
                return new Account2[size];
            }
        };
    
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeString(pwd);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
    
        @Override
        public String toString() {
            return "Account{" +
                    "name='" + name + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
    

    必须实现 Parcelable 中的 describeContents 与 writeToParcel 方法,describeContents 方法较少用到,使用默认实现即可;writeToParcel 方法用于写数据到 Parcel。

    还需要定义好一个 CREATOR 常量,泛型是我们需要传递的类。里面的 createFromParcel 方法用于从 Parcel 中读取数据。注意:这里的读取顺序必须与之前在 writeToParcel 方法中定义的写入顺序一致!

    传递的参数的代码与 Serializable 方式相同:

    Account2 entity = new Account2();
    entity.setName("deniro");
    entity.setPwd("wdour23");
    intent.putExtra("account2",entity);
    

    读取参数的代码如下:

    Account2 account2= getIntent().getParcelableExtra("account2");
    Log.d(TAG, "account2: "+account2);
    

    输出结果:

    D/NextActivity: account2: Account{name='deniro', pwd='wdour23'}

    相关文章

      网友评论

        本文标题:说说如何使用 Android 中的 Intent 来传递类对象

        本文链接:https://www.haomeiwen.com/subject/tjxkxqtx.html