【问题标题】:My exception can't be caught我的异常无法被捕获
【发布时间】:2013-08-07 20:57:08
【问题描述】:

我似乎根本无法捕捉到这个异常,应用程序就崩溃了。

public void GoToStation(View v)
{
try
{
 Intent myIntent = new Intent(MainActivity.this, CustomizedListViewStudentZone.class);
 startActivityForResult(myIntent, 0);
} 

}
catch (Exception e)
{
Toast.makeText(this, "You need a data connection to view Safety Zones", Toast.LENGTH_LONG).show();  

}

我只是不断收到应用程序崩溃和空指针异常

这是我的原木猫

01-06 04:55:28.667: E/AndroidRuntime(2983): FATAL EXCEPTION: main
01-06 04:55:28.667: E/AndroidRuntime(2983): java.lang.RuntimeException: Unable to start activity ComponentInfo{police.uk.greatermanchesterpoliceandroid/police.uk.greatermanchesterpoliceandroid.CustomizedListViewStation}: java.lang.NullPointerException
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.os.Looper.loop(Looper.java:150)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread.main(ActivityThread.java:4277)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at java.lang.reflect.Method.invokeNative(Native Method)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at java.lang.reflect.Method.invoke(Method.java:507)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at dalvik.system.NativeStart.main(Native Method)
01-06 04:55:28.667: E/AndroidRuntime(2983): Caused by: java.lang.NullPointerException
01-06 04:55:28.667: E/AndroidRuntime(2983):     at police.uk.greatermanchesterpoliceandroid.CustomizedListViewStation.onCreate(CustomizedListViewStation.java:100)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
01-06 04:55:28.667: E/AndroidRuntime(2983):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
01-06 04:55:28.667: E/AndroidRuntime(2983):     ... 11 more

【问题讨论】:

  • 请贴出异常的logcat
  • 你需要捕捉 NPE CustomizedListViewStudentZone.onCreate
  • 您的错误不在给定的代码中。它在您开始的活动中。 01-06 04:55:28.667: E/AndroidRuntime(2983): at police.uk.greatermanchesterpoliceandroid.CustomizedListViewStation.onCreate(CustomizedListViewStation.java:100)
  • 在上面给出的代码示例中,catch 块应该紧跟在 try 块之后。您的 catch 块在 GoToStation(View v) 方法之外,这没有多大意义。但是,从logcat来看,这看起来不像是NPE的来源。
  • 这里没有抛出异常!当执行离开这里时,它会被抛出!具体来说,它是在创建新活动时抛出的!检查您的 xml 文件!

标签: android exception nullpointerexception


【解决方案1】:

正如 Gabriel Netto 所说,您的错误位于 onCreate 中的 CustomizedListViewStation 中。对 startActivityForResult 的调用只是触发了对 android 操作系统的意图,并且会立即返回,因此它不会捕获新活动引发的任何异常。实际上,您放在startActivityForResult 之后的代码甚至可能在onCreate 之前运行。您需要检查onCreateCustomizedListViewStation 中的错误。

【讨论】:

    【解决方案2】:

    由于 Android 操作系统的架构,您无法捕获此类异常。通过调用startActivity(或类似方法),您实际上并没有立即创建新的Activity。相反,您说您想要显示这样的Activity 并且操作系统注册您的Intent(字面意思是意图)这样做。然后,当操作系统决定是处理您的Intent 的好时机时,它将创建您的Activity

    换句话说 - Activity 不会在对 startActivity 的调用中创建,而是在稍后创建。在操作系统的一些内部逻辑中。因此,当抛出异常时 - 您无法捕获它,因为它不再存在于您的方法中。

    【讨论】:

      【解决方案3】:

      正如 Dmitry Zaitsev 所说,您不会在 startActivity 处理 Activity 生命周期的异常。

      相反,您应该在第二个可能引发异常的 Activity 的 onCreate 捕获异常。

      【讨论】:

        【解决方案4】:

        非常感谢所有回答的人。这确实是很好的代码。错误是由目标活动引发的。

        修复是在创建 CustomizedListViewStudentZone 时处理错误。

        我对该方法应用了 try catch,问题已得到解决。

        【讨论】:

        • 您能否单击相应答案旁边的复选标记,以便将来的读者看到正确答案?谢谢。
        猜你喜欢
        • 2021-09-21
        • 2010-10-29
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        相关资源
        最近更新 更多