activity之间传值,解决:Parcelable encountered IOException writing serializable object异常
来源:互联网 发布:ewb仿真软件下载 编辑:程序博客网 时间:2024/05/19 03:43
今天写代码的时候遇到了两个activity之间需要传数据,本来是一件非常简单的事情
平常都是使用 intent.putExtra(type,value);就没问题了。
传对象的话就需要实现序列化接口了就行了。
为什么要实现序列化接口,你可以当这个是android的一个机制,就是得这么办,不这么办不行。
实际上实现序列化接口就是为了让数据能变成一种可存储或可传输的状态,可以传输到网络,也可以传输到本地。所以activity之间,你要是不实现序列化接口,那么你在SecondActivity中操作FirstActivity中的数据必将会导致内存泄露。
java中的实现序列化的方式有两种
1实现Serializable接口
2.实现Parcelable 接口
关于这两个接口的区别呢,在这里正好回忆一下吧
从写代码上来说:
Serializable:实现这个非常简单,直接 implement 就完了,什么都不用写,当然 你要是想写,声明一个 serialVersionUID 变量 就ok了,
serialVersionUID 的话 Android Studio 默认是不会自动生成的,你需要配置一下:
File -> Settings -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID' 勾上 然后 apply 、ok 就好了。
代码上实现Serialazable就是这么的简单
Parcelable:这个的话就有点复杂了,你需要 implement 这个 接口 然后 重写
构造方法 (传入Parcel对象)
descirbeContents方法
writeToParcel方法
创建一个Parcelable.Creator对象
Android Studio 有 生成Parcelable的插件 可以直接导入插件:File -> Setting -> Plugins -> Browse Respositories 然后搜索 Parcelable 安装
,就可以直接在model里一键导入Parcelable接口了,可以省去很大一部分时间
从实际使用角度上来看:
1.使用内存的使用,Parcelable比Serializable性能高
2.Serializable在序列化时会产生大量的临时变量,引起频繁GC
3.Parcelable不能使用在要将数据存储在磁盘的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。
具体使用还是看自己的需求吧
下面说一下自己的错误。。
从网络上得到的数据 然后 我实现了Serializable接口 传递到第二个activity中,结果突然给我报了一个:Parcelable encountered IOException writing serializable object
然后查看自己的代码,发现并没有实现Parcelable接口啊,然后想到以前好像见过这个异常,是因为内部分没有实现Serializable接口,但是回到代码一看,虽然有内部类,但是我也实现了Serializable接口了啊,为什么还会报这个异常呢?!!!
。。。。。
然后找了好久才发现是因为自己的model类中有一个Bitmap对象,,这个对象本身已经实现了Parcelable接口。。所以才会出现那个异常,然后直接把类改为实现Parcelable接口,然后运 行,果然好了。
- activity之间传值,解决:Parcelable encountered IOException writing serializable object异常
- android Activity传值报错 Parcelable encountered IOException writing serializable object
- Android异常--Parcelable encountered IOException writing serializable object
- Android异常--Parcelable encountered IOException writing serializable object
- Parcelable encountered IOException writing serializable object问题解决
- Parcelable encountered IOException writing serializable object 解决方法
- Parcelable encountered IOException writing serializable object (name = xxx)
- Parcelable encountered IOException writing serializable object (name = xxx)
- Parcelable encountered IOException writing serializable object (name = xxx)
- [Android]Parcelable encountered IOException writing serializable object (name = xxx)
- java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
- Parcelable encountered IOException writing serializable object (name = xxx)
- java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
- Android java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
- Parcelable encountered IOException writing serializable 问题解决
- Android java.lang.RuntimeException: Parcelable encountered IOException writing serializable object 解
- Parcelable encountered IOException writing serializable object (name = com.XXX.ActivityHist
- Android java.lang.RuntimeException: Parcelable encountered IOException writing serializable object 解
- jQuery解除事件绑定 unbind
- jeesite 记住用户名密码
- 全概率和贝叶斯公式
- docker三剑客(二)swarm
- FragmentTabHost组件,创建,实现,切换事件
- activity之间传值,解决:Parcelable encountered IOException writing serializable object异常
- FastCgi与PHP-fpm之间是个什么样的关系
- MVP的理解
- css box-sizing
- C++中this指针的用法详解
- 在SpringMVC+Mybatis中一个很方便的分页方法
- Discuz!论坛各版本通用SEO优化设置教程
- GridView子item正方形充满屏幕简单实现
- 面试中关于 new 和 malloc 的区别