Bug志

作者: 01427271c047 | 来源:发表于2017-08-13 16:40 被阅读9次

    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。

    相关文章

      网友评论

          本文标题:Bug志

          本文链接:https://www.haomeiwen.com/subject/uxderxtx.html