【问题标题】:getActionBar().setDisplayHomeAsUpEnabled(true); throws NullPointerException on new activity creation (Google - Basic Tutorial)getActionBar().setDisplayHomeAsUpEnabled(true);在创建新活动时抛出 NullPointerException(Google - 基础教程)
【发布时间】:2017-09-08 18:16:36
【问题描述】:

我正在关注this tutorial,并在此代码块的 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?

【问题讨论】:

  • 这意味着操作栏不存在。查看清单文件中提到的主题是否支持操作栏。

标签: android nullpointerexception android-actionbar


【解决方案1】:

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

【讨论】:

  • 任何关于为什么解决问题的解释都会改善你的答案。
  • 我最近也遇到了这个问题,通过这样做解决了。
  • 更改导入android.app.ActionBar;导入android.support.v7.app.ActionBarActivity;
【解决方案2】:

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

尝试使用这个主题:

android:theme="@android:style/Theme.Holo.Light"

【讨论】:

  • 您的 AndroidManifest.xml 中可能有一个 ThemeName.NoActionBar... 只需删除 .NoActionBar 部分就可以了!检查res/styles.xml 以获取可用样式...(此处为Android Studio,在其他编辑器中您必须自己编写样式)
【解决方案3】:

我遇到了同样的问题。

在我声明的清单的活动中

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

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

【讨论】:

    【解决方案4】:

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

    行为:

    后退“

    @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);
    }
    

    它对我有用。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        相关文档摘录:

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

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

        参数

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

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-12
            相关资源
            最近更新 更多