Bug志

2017-08-13  本文已影响9人  01427271c047

1. 当crash找不到crash时,我们该做些什么?

今天code时,代码莫名crash。但通过error也无法过滤出来,于是,我把过滤方式改为Verbose,No Filters,并且认准模拟器是否正确。然后开始运行,当crash时,马上关闭log。开始人工查找,在输入框里搜索项目相关,终于找到了bug。是一个空指针异常。XD

2.今天遇到了一个java.util.ConcurrentModificationException问题,出错的地方定位:

会crash在第二个for循环中myBeanList,因为此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。

说明:myAdapter为ListView的适配器,myBeanList为myAdapter的原数据源,searchList为新数据源

当一个adapter初始化时会给他一个数据源:adapter.setDatas(xxxxx)。

当进行  adapter.notifyDataSetChanged(新的数据源)  这个操作时,adapter进行如下操作:原数据源=新的数据源,然后notify。即myBeanList = searchList。这时myBeanList就发生改变。因而导致for循环crash。

解决方案:    先切换adapter的数据源为新数据源,在notify。

myAdapter.setDatas(searchList);   

myAdapter.notifyDataSetChanged(searchList);

经验: listview或者其他需要适配器的控件,当数据源要切换时,一定不要直接在notifyDataSetChanged(新数据源),而是先切换数据源(setDatas())再notify。

上一篇下一篇

猜你喜欢

热点阅读