我在主线程中遇到错误:
java.lang.RuntimeException: Unable to resume activity {...}:
java.lang.NullPointerException`
但是,堆栈跟踪中没有用户代码:
android.app.ActivityThread.performResumeActivity(ActivityThread.java:2812)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2841)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2276)
android.app.ActivityThread.access$800(ActivityThread.java:144)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5146)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
dalvik.system.NativeStart.main(Native Method)
我不确定这是从哪里来的,因为我只是点击了Thread.setDefaultUncaughtExceptionHandler
方法。我所知道的是它是一个空指针异常。自上次构建以来,我已经更改了许多的东西,所以我不知道抛出它的位置。如果没有用户代码,我该如何调试此错误?我没有任何东西可以投入onResume
:
@Override
protected void onResume() {
instance = this;
super.onResume();
}
正在点击onResume
方法,并且在没有例外的情况下执行到最后。如何调试错误?
答案 0 :(得分:0)
好的,我已经找到了解决方案:在重构的某个地方,Android Studio在另一个文件中愚蠢地重命名了一个完全不相关的视图ID,因为它碰巧与我所拥有的对象具有相同的通用名称(“listView”)重命名。
无论如何,我的解决方法如下:
View Breakpoints...
。Java Exception Breakpoint
。java.lang.NullPointerException
。我也遇到了一些内部异常,但我忽略了它们并点击了下一步,然后点击几下,我就错了。很遗憾,Android Studio没有提供直观的方法来调试这种常见错误(具有讽刺意味的是Android Studio本身造成的)。
在问题解决后不要忘记关闭异常断点,因为它会在每个空指针异常上中断,包括那些被抛出框架内并优雅地捕获。