20

我正在关注本教程,并在此代码块的 DisplayMessageActivity 的 onCreate 方法中获取 NullPointerException:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true); //Exception here
}

我正在遵循 NexusOne AVD 模板在模拟器上运行该应用程序。
当我单击输入一些文本的发送按钮时,我得到了异常。

这是日志:

09-03 23:02:07.586: E/AndroidRuntime(7095): FATAL EXCEPTION: main
09-03 23:02:07.586: E/AndroidRuntime(7095): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage.myfirstapp/com.mypackage.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.os.Looper.loop(Looper.java:137)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread.main(ActivityThread.java:5041)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at java.lang.reflect.Method.invokeNative(Native Method)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at java.lang.reflect.Method.invoke(Method.java:511)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at dalvik.system.NativeStart.main(Native Method)
09-03 23:02:07.586: E/AndroidRuntime(7095): Caused by: java.lang.NullPointerException
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.mypackage.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:40)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.Activity.performCreate(Activity.java:5104)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-03 23:02:07.586: E/AndroidRuntime(7095):     ... 11 more

通过评论这个块应用程序运行成功。

为什么会抛出 NullPointerException?

4

7 回答 7

31

您可能正在使用不支持的主题ActionBar。因此getActionBar()方法 throws NullPointerException

尝试使用这个主题:

android:theme="@android:style/Theme.Holo.Light"
于 2014-10-18T21:33:07.940 回答
31

尝试更改getActionBar()getSupportActionBar()((ActionBarActivity)getActivity()).getSupportActionBar()

于 2015-02-20T16:34:36.997 回答
10

我有同样的问题。

在我宣布的清单活动中

android:theme="@android:style/Theme.Black.NoTitleBar

这导致了错误。删除此行后,我的操作栏工作正常。

于 2013-10-16T21:02:50.687 回答
4

这应该不是必需的,但即使在 API 级别 14 之后,API 版本之间也存在一些行为不一致。

行为:

显示返回“<”图像,但按下时不起作用。作为一个好习惯,我用来实现 switch case 以处理返回事件。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

它对我有用。

于 2014-06-06T14:30:06.903 回答
1

我在试用 android 开发者网站上提供的导航抽屉示例应用程序时遇到了这个错误。事实证明,MainActivity没有扩展ActionBarActivity,因此getActionBar()返回 null 导致异常。

于 2015-06-18T12:22:15.490 回答
0

真的,其他答案都不适合我。我只是把整个注释掉了,if它起作用了。从方法名称(和文档)来看,您无论如何都不需要该功能(除非您想要它),所以不会造成伤害。

相关文档摘录:

设置是否应将家显示为“向上”可供性。如果选择“主页”在您的 UI 中返回单个级别而不是返回到顶层或首页,则将此设置为 true。

要一次设置多个显示选项,请参阅 setDisplayOptions 方法。

参数

showHomeAsUp true 向用户显示选择主页将返回上一级而不是应用的顶层。

于 2015-09-26T03:47:22.130 回答
0

您必须为您的活动设置了一些与操作栏不兼容的主题。

因此,只需检查您在清单文件中使用的主题并将其删除

或者如果您定义了自定义主题,请转到您的res->values- >style.xml 并将WindowActionBar 设置为 true。

于 2017-09-08T10:16:36.767 回答