我如何阅读和理解堆栈跟踪?

时间:2012-04-30 01:30:59

标签: android nullpointerexception stack-trace

我在市场上有一些应用程序,最近我收到了一些错误报告给出了堆栈跟踪。我不太明白如何阅读和理解它们,所以我实际上可以解决这个问题。

以下是其中一条痕迹:

java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.emsprotocols.nycemsprotocols/com.emsprotocols.nycemsprotocols.ConnectivitCheck}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at     com.emsprotocols.nycemsprotocols.ConnectivityCheck.onCreate(ConnectivityCheck.java:21)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
... 11 more

我不确定这是1错误还是2错误甚至更多。而且我不确定如何解决这个问题。

3 个答案:

答案 0 :(得分:3)

调试是关于查找原因,所以请查找以下行:

Caused by: java.lang.NullPointerException
at     com.emsprotocols.nycemsprotocols.ConnectivityCheck.onCreate(ConnectivityCheck.java:21)

然后查看该文件的第21行。对于没有指针的语言,Java肯定会得到很多空指针异常。通常发生的是,在底层实现中,对象成为数据结构的指针。当你调用一个对象的方法时,即

myObject.spindle()

VM遵循跟踪myObject的指针,期望找到一个数据结构,并期望在该结构中有一个entires引导它到一个名为spindle()的方法的代码。

问题是如果myObject为null,那么实际上没有数据结构可以查找spindle()方法。你已经要求它做不可能的事 - 没有异常处理,程序就无法继续。

最常见的是,对象为空的原因是你已经从其他东西中分配了你的对象,而这个对象无法给你一个,因此返回了null。

解决问题通常遵循三门课程中的一门或多门:

  • 找出你的对象为空的原因,然后修复
  • 在尝试调用其任何方法或访问其字段
  • 之前,请测试您的对象不为null
  • 处理异常 - 即告诉程序在遇到这种情况时如何恢复

答案 1 :(得分:2)

由于NullPointerException,应用程序无法加载活动com.emsprotocols.nycemsprotocols.ConnectivitCheck

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {com.emsprotocols.nycemsprotocols / com.emsprotocols.nycemsprotocols.ConnectivitCheck}:   显示java.lang.NullPointerException

第21行的onCreate方法引发了异常:

  

引起:在。的java.lang.NullPointerException   com.emsprotocols.nycemsprotocols.ConnectivityCheck.onCreate(ConnectivityCheck.java:21)

这实际上是一个错误,由另一个错误包裹(NullPointerException包裹RuntimeException

答案 2 :(得分:2)

at之后找到您的包名称,这是

at     com.emsprotocols.nycemsprotocols.ConnectivityCheck.onCreate(ConnectivityCheck.java:21)

这意味着ConnectivityCheck.java中的第21行出现问题,请尝试修复并继续。