正确处理try {} catch {}

时间:2012-08-25 17:12:25

标签: android android-layout android-intent android-widget

我正在制作应用,但我需要一些帮助。在实践中,我创建了这个代码:

try{

    Bundle extras = getIntent().getExtras();
    check = extras.getInt("checkpoint1");

}catch(NumberFormatException nfe){

    check = 0;

}

在oncreate中,您尝试从另一个活动获取变量检查的值,如果尝试不成功,则此变量必须设置为零。但是现在编写的代码给了我错误。你能帮帮我吗?

你的帮助给了我同样的错误:

E/AndroidRuntime(3028): FATAL EXCEPTION: main
E/AndroidRuntime(3028): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.BisMagdev.notesRainbow/it.BisMagdev.notesRainbow.livello4}: java.lang.NullPointerException
E/AndroidRuntime(3028):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(3028):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(3028):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(3028):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(3028):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(3028):     at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(3028):     at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(3028):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(3028):     at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(3028):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(3028):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(3028):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(3028): Caused by: java.lang.NullPointerException
E/AndroidRuntime(3028):     at it.BisMagdev.notesRainbow.livello4.onCreate(livello4.java:60)
E/AndroidRuntime(3028):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(3028):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(3028):     ... 11 more

6 个答案:

答案 0 :(得分:2)

您可以设置默认返回值,不需要try-catch:

Bundle extras = getIntent().getExtras();
check = extras.getInt("checkpoint1", 0);

此外,getInt不会抛出NumberFormatException,因此您无法捕获该异常......

答案 1 :(得分:0)

不认为这些陈述需要尝试/捕获阻止 ...所以删除它们并尝试..

Bundle extras = getIntent().getExtras();
check = extras.getInt("checkpoint1");

然后,您可以在将"checkpoint1"变量分配给check之前检查if ((extras.getInt("checkpoint1"))!=0){ check = extras.getInt("checkpoint1"); } else{ check = 0; } 的值。

{{1}}

答案 2 :(得分:0)

我认为你可以做到

if getIntent().hasExtra("checkpoint") { // this checks for the extra...
    Bundle extras = getIntent().getExtras();
    if (null != getIntent().getExtras()){
        check = extras.getInt("checkpoint", defaultValue); // where default is non zero
        check = extras.getInt("checkpoint"); // will be zero by default if checkpoint is not found
    } else {
        // There are no extras associated with this intent
    }
} else {
    // checkpoint not contained in the extras...
}

答案 3 :(得分:0)

livello4.java第60行是什么?我怀疑getExtras()返回的包是null。

答案 4 :(得分:0)

你捕获numberformatexception但是你得到一个nullpointer异常。你必须捕获nullpointer异常,或者你只是捕获异常。这意味着当事情出现问题时,您可以将变量设置为0。

答案 5 :(得分:0)

您必须更改Throwable中的NumberFormatException,以确保捕获NullPointerException。