Подтвердить что ты не робот

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
}

Я запускаю приложение на эмуляторе после шаблона AVD NexusOne.
Когда я нажимаю кнопку отправки с текстом, набранным, я получаю исключение.

Вот журнал:

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?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Поведение:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar 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, и это сработало. Из имени метода (и документации) вам не нужна эта функциональность (если вы этого не хотите), поэтому никакого вреда не было.

Относительная документация:

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

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

Параметры

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

Ответ 7

Вы должны установить некоторую тему в своей деятельности, которая несовместима с панелью действий.

Итак, просто проверьте тему, с которой вы работаете в вашем файле манифеста, и удалите его

или если вы определили настраиваемую тему, перейдите в res- > values- > style.xml и сделайте WindowActionBar равным true.