web-dev-qa-db-fra.com

getActionBar (). setDisplayHomeAsUpEnabled (true); lève NullPointerException lors de la création d'une nouvelle activité (Google - Tutoriel de base)

Je suis ce tutoriel et j'obtiens une exception NullPointerException à la méthode onCreate de DisplayMessageActivity à ce bloc de code:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true); //Exception here
}

J'exécute l'application sur un émulateur conforme au modèle NexusOne AVD.
Lorsque je clique sur le bouton d’envoi avec du texte saisi, je reçois l’exception. 

Voici le journal:

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

En commentant ce blocage, l'application fonctionne correctement.

Pourquoi une exception NullPointerException est-elle levée?

20
Chris

Vous utilisez probablement un thème qui ne prend pas en charge ActionBar. Ainsi, la méthode getActionBar() jette NullPointerException.

Essayer d'utiliser ce thème:

Android:theme="@Android:style/Theme.Holo.Light"
30

Essayez de changer getActionBar() en getSupportActionBar() ou ((ActionBarActivity)getActivity()).getSupportActionBar().

28
ewige

J'ai eu le même problème. 

Dans l'activité du manifeste j'avais déclaré 

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

qui a causé l'erreur. Après avoir supprimé cette ligne, ma barre d’action a bien fonctionné.

10
Petr

Cela ne devrait pas être nécessaire, mais il existe certaines incohérences de comportement entre les versions d'API, même après le niveau 14 de l'API. 

Comportement: 

L'image "<" précédente est affichée mais ne fonctionne pas lorsque vous appuyez dessus. Comme bonne pratique, j’utilise le boîtier du commutateur pour gérer les événements en retour. 

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

Cela a fonctionné pour moi.

4
Handrey

J'ai rencontré cette erreur lorsque j'essayais l'exemple d'application de tiroir de navigation disponible sur le site de développement d'Android. Il s'avère que la MainActivity n'a pas étendu la ActionBarActivity et que donc getActionBar() renvoie null entraînant l'exception. 

1
irs8925

Aucune des autres réponses n'a fonctionné pour moi, vraiment. Je viens de commenter cette if entière et cela a fonctionné. A partir du nom de la méthode ( et de la documentation ), vous n’avez de toute façon pas besoin de cette fonctionnalité (à moins que vous ne le souhaitiez).

Extrait de la documentation pertinente:

Définissez si le domicile doit être affiché comme une offre «supérieure». Réglez ceci sur true si la sélection de "home" revient d'un niveau unique dans votre interface utilisateur plutôt que de revenir au premier niveau ou à la première page.

Pour définir plusieurs options d’affichage à la fois, reportez-vous à la section setDisplayOptions méthodes.

Paramètres 

showHomeAsUp true pour montrer à l'utilisateur que la sélection de la maison aura pour retourner un niveau plus haut, plutôt que le plus haut niveau de l'application.

0
marcelocra

Vous devez avoir défini avec votre activité un thème incompatible avec la barre d'actions.

Donc, juste vérifiez le thème que vous utilisez dans votre fichier manifest et supprimez-le 

ou si vous avez défini thème personnalisé, accédez à votre res-> valeurs-> style.xml et définissez WindowActionBar sur true.

0
Vivek