我收到了来自我的应用用户报告的强制关闭错误:
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?
答案 0 :(得分:1)
outState在合同上不是null,因此您的Nav Item必须为null。在尝试保存或初始化变量之前进行空检查,以便在保存状态时不能为空。
答案 1 :(得分:0)
可能是outState或mCurrentNavItem为null。 我不认为STATE_CURRENT_NAV为空,因为这是一个预定义的字符串吗?
如果outState为null,请在使用之前创建它。
mCurrentNavItem的枚举应该具有类似NONE的默认值,然后您可以将成员变量初始化为该值并确保它永远不为空。
您还可以先检查mCurrentNavItem是否为空,然后再将该默认值保存到该包中。
希望有帮助...