去除onCreateOptionsMenu结果NullPointerException异常 [英] removing onCreateOptionsMenu results to NullPointerException

查看:482
本文介绍了去除onCreateOptionsMenu结果NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现,当我preSS我的设备上的菜单按钮,它给了我一个NullPointerException异常。

 公共布尔onCreateOptionsMenu(菜单菜单){
       。getMenuInflater()膨胀(R.menu.main,菜单); //空指针这里
        返回true;
    }

所以我所做的就是通过去除第二线以上和更改返回类型为false完全禁用菜单。然而,它仍然给我一个NullPointerException异常。这里是堆栈:

  3月11日至25日:50:20.931 1212年至1212年/ com.sblive.aufschoolbliz E / InputEventSender:异常调度完成信号。
3月11日至25日:50:20.931 1212年至1212年/ com.sblive.aufschoolbliz E /的MessageQueue-JNI:在异常回调的MessageQueue:handleReceiveCallback
3月11日至25日:50:21.040 1212年至1212年/ com.sblive.aufschoolbliz E /的MessageQueue-JNI:显示java.lang.NullPointerException
            在android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274)
            在android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89)
            在android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71)
            在android.app.Activity.onCreatePanelMenu(Activity.java:2505)
            在android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
            在android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224)
            在android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141)
            在android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199)
            在android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280)
            在com.android.internal.policy.impl.PhoneWindow。preparePanel(PhoneWindow.java:413)
            在com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795)
            在com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471)
            在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchKeyEvent(PhoneWindow.java:1867)
            在android.view.ViewRootImpl $ ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791)
            在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3483)
            在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3406)
            在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3540)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3406)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3516)
            在android.view.ViewRootImpl $ ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666)
            在android.view.inputmethod.InputMethodManager $ PendingEvent.run(InputMethodManager.java:1982)
            在android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698)
            在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689)
            在android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959)
            在android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            在android.os.MessageQueue.nativePollOnce(本机方法)
            在android.os.MessageQueue.next(MessageQueue.java:132)
            在android.os.Looper.loop(Looper.java:124)
            在android.app.ActivityThread.main(ActivityThread.java:5103)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:525)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            在dalvik.system.NativeStart.main(本机方法)3月11日至25日:50:21.040 1212年至1212年/ com.sblive.aufschoolbliz D / AndroidRuntime:关闭VM
3月11日至25日:50:21.040 1212年至1212年/ com.sblive.aufschoolbliz W / dalvikvm:主题ID = 1:螺纹未捕获的异常(组= 0x41465700)退出
3月11日至25日:50:21.150 1212年至1212年/ com.sblive.aufschoolbliz E / AndroidRuntime:致命异常:主要
    显示java.lang.NullPointerException
            在android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274)
            在android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89)
            在android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71)
            在android.app.Activity.onCreatePanelMenu(Activity.java:2505)
            在android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
            在android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224)
            在android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141)
            在android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199)
            在android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280)
            在com.android.internal.policy.impl.PhoneWindow。preparePanel(PhoneWindow.java:413)
            在com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795)
            在com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471)
            在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchKeyEvent(PhoneWindow.java:1867)
            在android.view.ViewRootImpl $ ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791)
            在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3483)
            在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3406)
            在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3540)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3406)
            在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3379)
            在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3398)
            在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3516)
            在android.view.ViewRootImpl $ ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666)
            在android.view.inputmethod.InputMethodManager $ PendingEvent.run(InputMethodManager.java:1982)
            在android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698)
            在android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689)
            在android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959)
            在android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            在android.os.MessageQueue.nativePollOnce(本机方法)
            在android.os.MessageQueue.next(MessageQueue.java:132)
            在android.os.Looper.loop(Looper.java:124)
            在android.app.ActivityThread.main(ActivityThread.java:5103)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:525)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            在dalvik.system.NativeStart.main(本机方法)


解决方案

您的堆栈跟踪显示实际的NPE在 ActionBarImplICS.java

  @覆盖
公共语境getThemedContext(){
        返回mActionBar.getThemedContext(); // 这里
}

有可能是一个几个原因你的动作条为null。


  • 你是不是调用的onCreate的setContentView()()?

  • 是否缺少至少安卓的minSdkVersion =11在清单

  • 您使用像一个主题的android:主题=@风格/ Theme.NoTitle

  • 您使用自定义样式像的android:windowIsFloating 的android:backgroundDimEnabled 的android :?windowNoTitle

修改:如果没有标题/动作条,解决这个问题最好的办法似乎是通过覆盖菜单键preSS

I found out that when I press the menu button on my device, it gives me a NullPointerException.

 public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu); //NullPointer Here
        return true;
    }

So what I did is to completely disable the menu by removing the second line above and changing the return type to false. However, it is still giving me a NullPointerException. Here is the stack:

11-25 03:50:20.931    1212-1212/com.sblive.aufschoolbliz E/InputEventSender﹕ Exception dispatching finished signal.
11-25 03:50:20.931    1212-1212/com.sblive.aufschoolbliz E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
11-25 03:50:21.040    1212-1212/com.sblive.aufschoolbliz E/MessageQueue-JNI﹕ java.lang.NullPointerException
            at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274)
            at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89)
            at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71)
            at android.app.Activity.onCreatePanelMenu(Activity.java:2505)
            at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
            at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224)
            at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141)
            at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199)
            at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280)
            at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:413)
            at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795)
            at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1867)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3516)
            at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666)
            at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:1982)
            at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698)
            at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689)
            at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959)
            at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:132)
            at android.os.Looper.loop(Looper.java:124)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

11-25 03:50:21.040    1212-1212/com.sblive.aufschoolbliz D/AndroidRuntime﹕ Shutting down VM
11-25 03:50:21.040    1212-1212/com.sblive.aufschoolbliz W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41465700)
11-25 03:50:21.150    1212-1212/com.sblive.aufschoolbliz E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:274)
            at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater(ActionBarActivityDelegate.java:89)
            at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:71)
            at android.app.Activity.onCreatePanelMenu(Activity.java:2505)
            at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)
            at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224)
            at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141)
            at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199)
            at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280)
            at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:413)
            at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:795)
            at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1471)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1867)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3791)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3774)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3516)
            at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3666)
            at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:1982)
            at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1698)
            at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1689)
            at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1959)
            at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:132)
            at android.os.Looper.loop(Looper.java:124)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

解决方案

Your stack trace shows that the actual NPE is in ActionBarImplICS.java:

@Override
public Context getThemedContext() {
        return mActionBar.getThemedContext(); // here
}

There can be a few reasons why your action bar is null.

  • Are you not calling setContentView() in onCreate()?
  • Are you missing at least android:minSdkVersion="11" in your manifest?
  • Are you using a theme like android:theme="@style/Theme.NoTitle"?
  • Are you using custom styles like android:windowIsFloating, android:backgroundDimEnabled or android:windowNoTitle?

EDIT: In case there is no title / actionbar, the best way to fix this seems to be by overriding the menu key press.

这篇关于去除onCreateOptionsMenu结果NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆