Android笔记-5:intent传递arraylist<object>出现java.lang.RuntimeException: Parcelable encountered IOException writing serializable object 的问题

今天遇到一个问题:

用intent传递一个arraylist<object>,object里面有一个接口对象,当然也继承了Serializable接口。当我把初始化arraylist方法写成静态方法就可以传递,写成成员方法,就无法传递,始终报错。无法序列化。异常如下:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object

我把接口对象改成实体对象后就没有异常了。

百度许久也不知为何。

个人感觉是静态方法把对象以及其内的接口对象也序列化了,动态方法却只能序列化该对象和其内的实体对象,其内接口对象并没有序列化。导致异常。(有读者知道具体原因可以留言告诉我。)

最后只能用静态方法来实现,用广播机制通知后续处理方法。

后续,补充:

此问题一直在我脑子里,所以我又在网上搜索关于接口是否可以序列化的问题。终于发现此贴参考此贴,见2楼分析。原来是因为实现接口我用的是内部类的方式。非静态内部类会隐含保存一个指向其外部类实例的引用。序列化估计会有问题。

后面我将会新建一个非内部类来测试此问题。待续。。。

后续2:找到原因之后,我果断把接口的实现改为了外部类,经测试果然没有异常了。

总结:

1.其实标题的arraylist与本文的核心无关,笔者被网上的一些帖子误导了。文章标题应该改为《intent传递非静态内部类出现java.lang.RuntimeException: Parcelable encountered IOException writing serializable object 的问题》

2.接口对象也不是重点,重点是非静态内部类

3.其实我用静态方法初始化时候,内部类是静态的,从而被序列化了。

4.非静态内部类序列化会出问题,请谨慎使用!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,283评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,872评论 18 399
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,124评论 0 4
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,552评论 0 3
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,155评论 0 62