保存实例上的空指针异常

时间:2014-04-24 20:57:40

标签: android android-fragments forceclose

我收到了来自我的应用用户报告的强制关闭错误:

java.lang.NullPointerException
       at com.beerportfolio.beerportfoliopro.MainDrawer2.onSaveInstanceState(MainDrawer2.java:160)
       at android.app.Activity.performSaveInstanceState(Activity.java)
       at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java)
       at android.app.ActivityThread.performStopActivityInner(ActivityThread.java)
       at android.app.ActivityThread.handleStopActivity(ActivityThread.java)
       at android.app.ActivityThread.access$1100(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
       at android.os.Handler.dispatchMessage(Handler.java)
       at android.os.Looper.loop(Looper.java)
       at android.app.ActivityThread.main(ActivityThread.java)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
       at dalvik.system.NativeStart.main(NativeStart.java)

第160行是:

outState.putInt(STATE_CURRENT_NAV, mCurrentNavItem.ordinal());

来自这种方法:

@Override
    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putInt(STATE_CURRENT_NAV, mCurrentNavItem.ordinal());
    }

我应该只使用if语句来检查STATE_CURRENT_NAV或mCurrentNavItem.ordinal()是否为NULL,然后它们是否不执行outState.putInt?

2 个答案:

答案 0 :(得分:1)

outState在合同上不是null,因此您的Nav Item必须为null。在尝试保存或初始化变量之前进行空检查,以便在保存状态时不能为空。

onSaveInstanceState(Bundle)

答案 1 :(得分:0)

可能是outState或mCurrentNavItem为null。 我不认为STATE_CURRENT_NAV为空,因为这是一个预定义的字符串吗?

如果outState为null,请在使用之前创建它。

mCurrentNavItem的枚举应该具有类似NONE的默认值,然后您可以将成员变量初始化为该值并确保它永远不为空。

您还可以先检查mCurrentNavItem是否为空,然后再将该默认值保存到该包中。

希望有帮助...