项目BUG总结2

来源:互联网 发布:解压缩包的软件 编辑:程序博客网 时间:2024/03/29 06:01

    继续项目bug总结

   B1:java.lang.InstantiationException: can't instantiate class com.jone.test.myfragmetn; no empty constructor

        看字面意思是fragment缺少一个空的构造函数,这个奇葩问题找了好长一段时间,最终定位是有人写了一个Fragment的有参数的构造器去传了参数

       解决方案: 添加一个空的构造函数,,建议后续给fragment传参数还是通过Bundle设置setArgument的标准格式传参数

   B2:java.util.ConcurrentModificationException   /java.util.ArrayList$ArrayListIterator.next

      在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。则使用会报以下异常:
java.util.ConcurrentModificationException"

     解决方案:  List<Cookie> cookies = cookieStore.getCookies();   List<Cookie> currentCookies = new ArrayList<Cookie>(cookies);  将我们需要使用的list与数据源断开引用关系,此时如果数据源即使发生变化也不会出现此异常

  B3:java.lang.IllegalArgumentException: View not attached to window manager

   引发这个的原因基本上都一致都是Dismiss对话框的时候,Activity已经不再存在;  这个问题几乎都是DialogFragment在dismiss的时候出现,找了几篇文章

  http://blog.csdn.net/yuzhiboyi/article/details/8463138

  http://my.oschina.net/u/779520/blog/157822

http://blog.csdn.net/listening_music/article/details/7108024


 B4:java.lang.IllegalStateException: Fragment already added 

    当快速双击调用FragmentTransaction.add()方法添加fragmentA,而fragmentA不是每次单独生成的,就会引起这个异常。
    DialogFragment.show()内部调用了FragmentTransaction.add()方法,所以调用DialogFragment.show()方法时候也可能会出现这个异常。

   解决方案:  

    在add()方法时候,先判断fragmentA.isAdded(),如下调用可以避免该异常:
       if(!fragmentA.isAdded()){
                    FragmentManager manager = ((FragmentActivity)context).getSupportFragmentManager();
                    FragmentTransaction ft = manager.beginTransaction();
                    ft.add(fragmentA, "fragment_name");
                    ft.commit();
    }

0 0
原创粉丝点击