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