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。
网友评论