[Android基础]Android中如何使用Intent传递对象

我们可以借助Intent来启动活动、发送广播、启动服务等,在进行上述操作时,我们还能在Intent中添加一些附加数据,已达传值的效果,比如下面的代码:
MainActivity

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name", "xiaoming");
intent.putExtra("age", 17);
startActivity(intent);

SecondActivity可以得到这些值:

getIntent().getStringExtra("name");
getIntent().getIntExtra("age", 0);

这里只是利用Intent传递一些值,如何传递对象呢?

有两种方式,一种是Serializable方式,另一种是Parcelable方式。

Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化方法很简单,只需要让一个类去实现Serializable这个接口就可以了。
比如一个Animal类,其中包含了type,sex这两个字段,代码如下:

public class Animal implements Serializable
{
    private String type;
    private String sex;
    public String getType()
    {
        return type;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public Stirng getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
}

MainActivty.java

Animal animal = new Animal();
animal.setType("panda");
animal.setSex("male");
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent,putExtra("animal_panda", animal);
startActivity(intent);

SecondActivity.java

Animal animal = (Animal)getIntent().getSerializableExtra(animal_panda);

这里调用了getSerializableExtra()方法获取通过参数传递过来的序列化对象,接着再将它向下转型成Person对下岗,这样我们就成功实现了使用Intent来传递对象的功能了。

除了Serializable之外,使用Parcelable也可以实现相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样就实现传递对象的功能了。

public class Animal implements Serializable
{
    private String type;
    private String sex;
    public String getType()
    {
        return type;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public Stirng getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
    @Override
    public int describeContents()
    {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeString(type);
        dest.writeString(sex);
    }
    public static final Parcelable.Creator<Animal> CREATOR = new Parcelable.Creator<Animal>()
    {
        @Override
        public Animal createFromParcel(Parcel source)
        {
            Animal animal = new Animal();
            animal.type = source.readStirng();
            animal.sex = source.readString();
            return animal;
        }
        @Override 
        public Aniaml[] newArray(int size)
        {
            return new Animal[size];
        }
    }
}

SecondActivity.java

Animal animal = (Animal)getIntent.getParcelableExtra(animal-panda);

存在即理由,Parcelable方式虽然复杂,但效率更高,一般推荐使用Parcelable方式来实现Intent传递的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值