Android Intent传递对象 Serializable& Parcelable

xiaoxiao2021-02-28  141

问题描述:

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!

转载请注明原文地址: https://www.6miu.com/read-23069.html

最新回复(0)