android java.io.NotSerializableException序列化异常


今天被这个异常坑了好几个小时。首先把我的需求说下。。今天要开发一个底部Tabbar。但是Tabbar的数据和数量都是在服务端传过来,然后我们在通过数据绘制Tabbar,


绘制完后需要把这段信息保存序列化保存在本地。以免下次网络不好的时候,我们而已直接在本地拿数据来绘制Tabbar。


好了,搞了2个小时。代码全部写好了,准备开始测试的时候,在序列化对象的时候一直出爆错

 java.io.NotSerializableException:

com.logansoft.zcbao.fragment.menu.control.TabbarData;
,,没错,就是一直爆错

 java.io.NotSerializableException:

com.logansoft.zcbao.fragment.menu.control.TabbarData;
。。。。。。

大家发现了一个什么问题了没有。我明明序列化的是TabbarEntity。为什么会告诉我无法序列化,TabbarData这个类呢。搞了好久看了源代码才发现,原来这个序列化有一个毛病。。就是在序列化之前不能被其他对象间接或者直接引用,否者就会连使用到的被使用的那个对象也一并序列化。。

--------------------------------下面贴一段我的代码

<span style="font-size:18px;">TabbarEntity tabbarEntity=new TabbarEntity();
        List<TabbarEntity.AppTabListBean> tabList=new ArrayList<TabbarEntity.AppTabListBean>(){};

        for (int i = 0; i < 4; i++) {
            //构造显示数据
            TabbarEntity.AppTabListBean appTabBean=new TabbarEntity.AppTabListBean();
            appTabBean.setTabTitle(defaultText[i]);

            appTabBean.setTabIcon(images_unselected[i] + "");
            appTabBean.setTabSelectIcon(image_selected[i] + "");

            appTabBean.setTabUrl(default_tabbar_url[i]);
            tabList.add(appTabBean);
        }
<span style="white-space:pre">	</span>把下面的红色加升的序列化代码移到这里。。好了解决了<span style="white-space:pre">	</span></span><pre name="code" class="java"><span style="font-size:24px;color:#ff0000;"><span style="white-space:pre">	</span><span style="background-color: rgb(51, 204, 0);">serializeTabbarData(tabbarEntity);</span></span>
//构建url和bitmap String[] url=new String[tabList.size()]; Bitmap[] selectIcon=new Bitmap[tabList.size()]; Bitmap[] unSelectIcon=new Bitmap[tabList.size()]; for (int i = 0; i <tabList.size(); i++) { url[i]=tabList.get(i).getTabUrl(); selectIcon[i]= BitMapUtil.getBitmapToResource(context,Integer.parseInt(tabList.get(i).getTabIcon())); unSelectIcon[i] = BitMapUtil.getBitmapToResource(context,Integer.parseInt(tabList.get(i).getTabSelectIcon())); } //放进底部实例 BottomViewItem.getInstance().setUrl(url); BottomViewItem.getInstance().setSelectIcon(selectIcon); BottomViewItem.getInstance().setUnSelectIcon(unSelectIcon); //这里序列化的时候,在上面已经被BottomViewItem,和Bitmap引用到了,所以在序列化的时候也会一并把其他都序列化了。 serializeTabbarData(tabbarEntity); tabbarEntity.setAppTabList(tabList);

 


---------------------------------

然后来总结下。。

下次在序列化对象的时候,一定要在对象构造完后。先序列化,在被其他对象引用里面的值,否者他们就会有关联关系,。。。。。





  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值