测试过程中遇到的各种Exception

上一篇 / 下一篇  2015-11-05 10:31:29 / 个人分类:java相关

测试工作以来,经常抓log查看到一些异常,大致了解一些,学习总结:

1.  java.lang.ClassCastException: com.android.contacts.calllog.CallLogActivity cannot be cast to com.android.contacts.activities.PeopleActivity

ClassCastException:类型转换异常,记住不能把父类的类型强制转换为子类的类型,因为子类有的方法父类不一定有

2.  java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.contacts.common.list.OnPhoneNumberPickerActionListener.onPickPhoneNumberAction(android.net.Uri)' on a null object reference

NullPointerException:空指针异常,解决方式貌似是加空指针异常判断

3.  java.lang.RuntimeException: Unable to resume activity {com.changhong.synergystorage/com.changhong.synergystorage.MainActivity}: java.lang.IllegalArgumentException: Invalid path: /storage/sdcard0

RuntimeException:运行时异常,表示你的程序代码本身有bug,比如ArrayIndexOutOfBoundsException,数组下标越界(数组定义的长度不够实际使用),代码本身有问题!一旦出现RuntimeException一定要处理,处于它不用try catch,因为没有意义。这里再说一下,不是RuntimeException的话就是编译时异常,只有这两种异常,用try carch来截获异常,鄙人报的bug大部分还是runtime呀,补充说下编译时异常:
     编译时异常其实是可以这么理解:你的代码本身没有问题(运行时异常是你的代码本身有问题),但是代码里如果含有处理文件流(这里只是举个例子,还有很多类似的其它的情况)的时候,java规定,遇到这种情况,必须要在代码里强制抛出可能遇到的文件流异常,你可以在方法开头就throws,或者在catch后面进行捕获。其实代码本身逻辑跟语法都是没问题,但是文件流这种操作本身会存在潜在的问题与风险,这种问题是与你的代码无关的,java会强制要求在代码里作出预期处理。也就是刚才说的要么在方法开头就throws可能遇到的文件异常,要么就去catch后面捕获具体的文件异常。如果你在代码里不做这样的处理,运行代码后,控制台就会输出错误。代码一样跑不起来。

4.   java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{2dd6443b V.E..... R......D 0,0-573,158} not attached to window manager

IllegalArgumentException:这个异常表明向方法传递了一个不合法或者不正确的参数,要看看传值的方法是否参数不正确


5.  android.view.WindowManager$BadTokenException:unable to add window --token android.os.BinderProxy@42a18870 running? 是安卓程序报的错,不能添加窗口,某个什么玩意儿不存在,网上某个分析借鉴一下:因为new 对话框的时候参数content指定成了this,指向当前子Acitvity的content,但子acitivity是动态创建的,不能保证一直存在,其父活动的content是稳定存在的,所以把content替换为getparent()即可

6. java.lang.IndexOutofBoundsException:数据越界,例如一个List的size(0)为1但是你却用get(1)来获取数据,就会报这个错误。


7.  java.lang.OutOfMemoryError: Failed to allocate a 65548 byte allocation with 30010 free bytes and 29KB until OOM

   
OutOfMemoryError:此异常是应用程序由于没有足够的内存空间所以挂了,这个细说一下:

.1.java.lang.OutOfMemoryError: Java heap space: java虚拟机在抱怨堆中已经没有更多的空间了,需要创建一个新对象,但是这个对象需要的内存已经超过虚拟机所剩的了,VM会尝试FULL GC去回收内存,如果不行就抛出这个异常,

.2.java.lang.OutOfMemoryError: PermGen space:和第一个现象差不多,不过这里准备分配内存的空间是持久代。同样的,你的空间已经不够了,所以虚拟机善意的提醒了你一下。如果你增加了-XX:MaxPermSize这个参数的值的话,这个问题通常就解决了

.3.java.lang.OutOfMemoryError: GC overhead limit exceeded:VM告诉你程序花在垃圾回收上的时间太多了,没有收效还,什么情况呢?比如你98%的时间都去GC了,结果才回收了不到2%的控件的话,VM果断抛出这个异常,

.4.java.lang.OutOfMemoryError: unable to create new native thread: 不能创建一个新的本地进程,VM请求system去创建一个本地进程,而sytem完不成的话,就会报这个错,

.5.java.lang.OutOfMemoryError: (Native method):C语言开发者的问题,相对于刚才的出错信息,这次异常是在JNI或者 本地方法中检测到的,而不是在虚拟机执行的代码中。



8. java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(16908298, class com.android.contacts.common.list.PinnedHeaderListView) with Adapter(class android.widget.HeaderViewListAdapter)]  java告诉你,在非法或者不适当的时间调用方法时产生的信号,
就是java环境或java app没有处于请求操作所要求的适当状态,后面的报错信息就很能说明问题,就是适配器的内容改变了,但是listview却没有收到通知,确保你的适配器内容没有被后台进程改变,仅仅是被ui进程改变,确保内容变化时适配器调用了通知函数。








TAG:

 

评分:0

我来说两句

Open Toolbar