Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者Intent中进行传递,也可以将对象转化为JSON字符串,进行传递。

序列化对象可以使用Java的Serializable的接口、Parcelable接口。转化成JSON字符串,可以使用Gson等库。
1.Serializable
public class Author implements Serializable{
private int id;
private String name;
//...
}
public class Book implements Serializable{
private String title;
private Author author;
//...
}
传递数据
Book book=new Book();
book.setTitle("Java编程思想");
Author author=new Author();
author.setId(1);
author.setName("Bruce Eckel");
book.setAuthor(author);
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra("book",book);
startActivity(intent);
接收数据
Book book= (Book) getIntent().getSerializableExtra("book");
Log.d(TAG,"book title->"+book.getTitle());
Log.d(TAG,"book author name->"+book.getAuthor().getName());
2.转化为JSON字符串
public class Author{
private int id;
private String name;
//...
}
public class Book{
private String title;
private Author author;
//...
}
传递数据
Book book=new Book();
book.setTitle("Java编程思想");
Author author=new Author();
author.setId(1);
author.setName("Bruce Eckel");
book.setAuthor(author);
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra("book",new Gson().toJson(book));
startActivity(intent);
接收数据
String bookJson=getIntent().getStringExtra("book");
Book book=new Gson().fromJson(bookJson,Book.class);
Log.d(TAG,"book title->"+book.getTitle());
Log.d(TAG,"book author name->"+book.getAuthor().getName());
3.使用Parcelable
实现Parcelable接口需要实现两个方法
除了要实现这两个方法还必须创建一个Parcelable.Creator接口的实例,用于读取Parcel容器中的数据
public class Author implements Parcelable{
private int id;
private String name;
//setter & getter...
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,
// 以便从parcel容器获取数据
dest.writeString(name);
dest.writeInt(id);
}
public static final Creator<Author> CREATOR=new Creator<Author>() {
@Override
public Author createFromParcel(Parcel source) {
//从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
Author author=new Author();
author.setName(source.readString());
author.setId(source.readInt());
return author;
}
@Override
public Author[] newArray(int size) {
//创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。方法是供外部类反序列化本类数组使用。
return new Author[size];
}
};
}
public class Book implements Parcelable{
private String title;
private Author author;
//setter & getter...
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeParcelable(author,flags);
}
public static final Creator<Book> CREATOR=new Creator<Book>() {
@Override
public Book createFromParcel(Parcel source) {
Book book=new Book();
book.setTitle(source.readString());
book.setAuthor(source.<Author>readParcelable(Author.class.getClassLoader()));
return book;
}
@Override
public Book[] newArray(int size) {
return new Book[0];
}
};
}
传递数据
Book book=new Book();
book.setTitle("Java编程思想");
Author author=new Author();
author.setId(1);
author.setName("Bruce Eckel");
book.setAuthor(author);
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra("book",book);
startActivity(intent);
接收数据
Book book=getIntent().getParcelableExtra("book");
Log.d(TAG,"book title->"+book.getTitle());
Log.d(TAG,"book author name->"+book.getAuthor().getName());
4.性能分析
经过测试,我们得到下图的效果
可以看出,通过转换为字符串的速度是最慢的。Seralizable次之,Parcelable比Seralizable快10倍。所以从性能上考 虑,我们必定优先选择Parcelable。但是Parcelable有大量重复的模板代码,如何简化这些操作,将是下面主要讲解的内容。
5.简化Parcel操作
如果你使用android Studio 可以通过安装android-parcelable-intellij-plugin插件,或者自己配置模板进行操作。
5.1 parceler
除了上面的操作,还有大量的第三方库来简化Parcelable操作。当然使用这些库也许会降低Parcelable的性能。Parceler就是这样一个库。
Parceler使用非常简单,在定义Model时用@Parcel进行注解,在传递数据的时候使用Parcels的wrap方法来包装成一个Parcelable对象。获取数据时用Parcels的unwrap方法来获取对象。
@Parcel
public class Author {
int id;
String name;
//setter & getter...
}
@Parcel
public class Book {
String title;
Author author;
//setter & getter
}
传递对象
Book book=new Book();
book.setTitle("Java编程思想");
Author author=new Author();
author.setId(1);
author.setName("Bruce Eckel");
book.setAuthor(author);
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra("book", Parcels.wrap(book));
startActivity(intent);
接收对象
Book book= Parcels.unwrap(getIntent().getParcelableExtra("book"));
Log.d(TAG,"book title->"+book.getTitle());
Log.d(TAG,"book author name->"+book.getAuthor().getName());
除了Parceler之外,还有如auto-parcel,ParcelableCodeGenerator,ParcelableGenerator等第三方库,这里我将不进行讲解,有兴趣的朋友,可以自行研究。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 传递对象
# 传递bundle
# intent传递对象
# Android List(集合)中的对象以某一个字段排序案例
# Android使用FontMetrics对象计算位置坐标
# Android使用Canvas对象实现刮刮乐效果
# Android编程实现全局获取Context及使用Intent传递对象的方法详解
# Android中将Bitmap对象以PNG格式保存在内部存储中的方法
# Android中利用C++处理Bitmap对象的实现方法
# Android中实现长按修改ListView对象的内容
# Android中深入学习对象的四种引用类型
# 可以通过
# 可以使用
# 序列化
# 转化为
# 第三方
# 方法来
# 创建一个
# 时用
# 如果你
# 本类
# 这两个
# 将是
# 有兴趣
# 这样一个
# 我将
# 可以看出
# 句话
# 也许会
# 转换为
# 还必须
相关文章:
Thinkphp 中 distinct 的用法解析
如何选择美橙互联多站合一建站方案?
如何高效利用亚马逊云主机搭建企业网站?
如何在IIS服务器上快速部署高效网站?
临沂网站制作公司有哪些,临沂第四中学官网?
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何在阿里云虚拟主机上快速搭建个人网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站VPS推荐:2025年高性能服务器配置指南
建站之星ASP如何实现CMS高效搭建与安全管理?
如何用美橙互联一键搭建多站合一网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
公司网站设计制作厂家,怎么创建自己的一个网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
免费视频制作网站,更新又快又好的免费电影网站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在局域网内绑定自建网站域名?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
常州自助建站费用包含哪些项目?
c# 在ASP.NET Core中管理和取消后台任务
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
存储型VPS适合搭建中小型网站吗?
制作网站的软件免费下载,免费制作app哪个平台好?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在阿里云服务器自主搭建网站?
如何设计高效校园网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
智能起名网站制作软件有哪些,制作logo的软件?
如何选购建站域名与空间?自助平台全解析
如何确认建站备案号应放置的具体位置?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站之星代理平台如何选择最佳方案?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在Windows环境下新建FTP站点并设置权限?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
山东网站制作公司有哪些,山东大源集团官网?
宁波自助建站系统如何快速打造专业企业网站?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
*请认真填写需求信息,我们会在24小时内与您取得联系。