getActionBar()setDisplayHomeAsUpEnabled(真)。在新活动创建时抛出NullPointerException(Google - Basic Tutorial)

时间:2013-09-03 23:17:27

标签: android nullpointerexception android-actionbar

我正在关注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?

7 个答案:

答案 0 :(得分:30)

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

尝试使用此主题:

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

答案 1 :(得分:29)

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

答案 2 :(得分:10)

我遇到了同样的问题。

在我宣布的清单的活动中

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

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

答案 3 :(得分: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);
}

它对我有用。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

其他答案都没有对我有用,真的。我只是评论了整个if并且它有效。从方法名称(and documentation),您无论如何都不需要该功能(除非您需要它),因此不会造成任何伤害。

相关文件摘录:

  

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

     

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

     

参数

     

showHomeAsUp如果显示用户选择主页将为真   返回一级而不是应用程序的顶级。

答案 6 :(得分:0)

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

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

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