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

版权声明:如果喜欢,就收藏吧 O(∩_∩)O~ https://blog.csdn.net/deniro_li/article/details/83689605

使用 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’}

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/83689605