Android中Intent传递自定义对象类型的数据
16lz
2021-01-25
Android中Intent是用来实现组件之间的通信的,可以在组件之间传递数据。可以传递一些基本类型的数据,也可以传递自定义对象类型的数据,但是如果要传递自定义类型的对象数据,这个自定义类型的对象必须是实现了Serializable接口或者是实现Parcelable接口。
1.实现Serializable接口的对象
实现Serializable接口非常简单,Serializable接口中没有需要实现的函 数。直接使用implements关健字即可,无需其他操作。
public class User implements Serializable{ private int id; private String name; public User(){ } public User(int id,String name){ this.id=id; this.name=name; } public void setId(int id ){ this.id=id; } public int getId(){ return id; } public void setName(String name){ this.name=name; } public String getName(){ return name; } }
上述代码就是定义了一个实现了Serializable接口的User对象,这个User对象就可以被Intent中传递。
传递该对象类型的数据
User user=new User(1,"张三");intent.putExtra("user",user);
获取该对象类型的数据
getIntent().getSerializableExtra("user");
2.实现Parcelable接口的对象
实现Parcelable接口步骤:
(1)重写describeContents方法,默认返回0就可以。
(2)重写writeToParcel方法。
(3)实例化静态内部类对象CREATOR
public class User implements Parcelable{ private int id; private String name; public User(){ } public User(int id,String name){ this.id=id; this.name=name; } public void setId(int id ){ this.id=id; } public int getId(){ return id; } public void setName(String name){ this.name=name; } public String getName(){ return name; } } public int describeContents(){ return 0; } public void writeToParcel(Parcel out,int flags ){ out.writeInt(id); out.writeString(name); /* 一定要按照成员变量声明的顺序来打包数据(写数据)*/ } public static final Parcelable.Creaator<User> CREATOR=new Parcelbale.Creator<User>(){ /*返回实现Parcelable接口的单个实例*/ public User createFromParcel(Parcel source){ User user=new User(); user.setId(source.readInt()); user.setName(source.readString()); return user; /*一定要按照成员变量声明的顺序来读数据*/ } /*返回实现Parcelable接口的多个实例*/ public User[] newArray(int size){ return new User[size]; }}}
上述代码是定义了一个实现Parcelable接口的对象,这个User对象也可以被Intent传递。
传递对象类型的数据
User user=new User(1,"张三");intent.putExtra("user",user);
获取该对象类型的数据
getIntent().getParcelableExtra("user");
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- android studio 错误:“java.io.EOFException”
- [置顶] android 跨进程通信
- android launcher之检测应用程序图标在桌面是否存在
- android中的设计模式--观察者模式
- Android(安卓)-- IPC通信机制之一Binder简介
- Android(安卓)如何自定义一个ContentProvider