Android Intent传递对象 Serializable & Parcelable

问题描述:

Intent 可以   启动活动  启动服务  发送广播 

在用Intent 的putExtra()方法传递的数据类型是有限的 比如不好传递一个自定义对象:

解决办法:

两种方式: Serializable  & Parcelable 

1.Serializable  

Serializable :序列化,表示将一个对象转换成可存储可传输的状态,序列化后的对象可以在网络上传输也可以持久化到本地

实现方法:让一个类去实现Serializable接口

如有一个Dog类 包含了name age两个字段 序列化就可以这样写:

public class Dog 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;
    }
}
让 Dog类实现了Serializable接口 这样所有的Dog对象就都是可序列化的了

然后在Activity跳转时即可写成:

Dog dog = new Dog();
dog.setName("Love");
dog.setAge(520);
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("dog_data",dog);
startActivity(intent)
SecondActivity获取这个对象: 

Dog dog = (Dog) getIntent().getSerializableExtra("dog_data");

2.Parcelable

Parcelable: 将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的数据,亦可实现传递对象的功能

创建一个Cat类,实现Parcelable接口

/**
 * Created by UFO
 * 
 * 1.首先实现Parcelable接口 必须重写describeContents()和writeToParcel()两个方法
 */

public class Cat implements Parcelable {
    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;
    }
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);//写出name
        dest.writeInt(age);//写出age
    }
    public static final  Parcelable.Creator<Cat> CREATOR = new Parcelable.Creator<Cat>(){
        @Override
        public Cat createFromParcel(Parcel source) {
            Cat cat = new Cat();
            cat.name = source.readString();//读取name
            cat.age= source.readInt();//读取age
            return cat;
        }

        @Override
        public Cat[] newArray(int size) {
            return new Cat[size];
        }
    };
}

然后在Activity跳转时即可写成:

Cat cat = new Cat();
cat.setName("baby");
cat.setAge(521);
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("cat_data",cat);
startActivity(intent)
SecondActivity获取这个对象: 

Cat cat = (Cat) getIntent().getParcelableExtra("cat_data");

OK!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值