getActionBar () setDisplayHomeAsUpEnabled (истина). Бросает NullPointerException при создании новой активности (Google – основное учебное пособие)

Я следую этому руководству и получаю исключение NullPointerException в методе onCreate DisplayMessageActivity в этом блоке кода:

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?

Solutions Collecting From Web of "getActionBar () setDisplayHomeAsUpEnabled (истина). Бросает NullPointerException при создании новой активности (Google – основное учебное пособие)"

Вероятно, вы используете тему, которая не поддерживает ActionBar . Следовательно, getActionBar() NullPointerException .

Пытаясь использовать эту тему:

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

Попробуйте изменить getActionBar() на getSupportActionBar() или ((ActionBarActivity)getActivity()).getSupportActionBar() .

У меня такая же проблема.

В деятельности манифеста я объявил

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

Что вызвало ошибку. После удаления этой строки моя панель действий работала нормально.

Это не обязательно, но есть некоторые несоответствия поведения между версиями API даже после уровня API 14.

Поведение:

Обратное изображение «<» отображается, но при нажатии оно не работает. В качестве хорошей практики я использую для реализации случая переключения, чтобы обрабатывать событие назад.

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

Это сработало для меня.

Я столкнулся с этой ошибкой, когда я попробовал приложение примера ящика навигации, доступное на сайте разработчика Android. Оказывается, MainActivity не расширяет ActionBarActivity и поэтому getActionBar() возвращает null, вызывающий исключение.

На самом деле ни один из других ответов не работал для меня. Я просто прокомментировал это целое, if и это сработало. Из имени метода ( и документации ) вам не нужна эта функциональность (если вы этого не хотите), поэтому никакого вреда не было.

Соответствующая документация:

Укажите, должен ли отображаться домашний экран как «вверх». Установите для этого значение true, если выбор «home» возвращается на один уровень в пользовательском интерфейсе, а не обратно на верхний уровень или на первую страницу.

Чтобы установить несколько параметров отображения сразу, см. Методы setDisplayOptions.

параметры

showHomeAsUp true, чтобы показать пользователю, что выбор дома вернется на один уровень вверх, а не на верхний уровень приложения.