web-dev-qa-db-de.com

getActionBar (). setDisplayHomeAsUpEnabled (true); wirft NullPointerException bei der Erstellung neuer Aktivitäten (Google - Grundlegende Anleitung)

Ich folge diesem Tutorial und erhalte eine NullPointerException an der onCreate-Methode der DisplayMessageActivity an diesem Codeblock:

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

Ich führe die App in einem Emulator nach der Vorlage NexusOne AVD aus.
Wenn ich auf die Senden-Schaltfläche mit eingegebenen Text klicke, erhalte ich die Ausnahme. 

Hier ist das Protokoll:

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

Durch das Kommentieren dieses Blocks wird die App erfolgreich ausgeführt.

Warum wird eine NullPointerException ausgelöst?

20
Chris

Sie verwenden wahrscheinlich ein Design, das ActionBar nicht unterstützt. Daher wirft die getActionBar()-Methode NullPointerException.

Versuchen Sie es mit diesem Thema:

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

Ändern Sie getActionBar() in getSupportActionBar() oder ((ActionBarActivity)getActivity()).getSupportActionBar().

28
ewige

Ich hatte das gleiche Problem. 

In der Tätigkeit des Manifests hatte ich erklärt 

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

was den fehler verursacht hat. Nachdem ich diese Zeile entfernt hatte, funktionierte meine Aktionsleiste einwandfrei.

10
Petr

Es sollte nicht notwendig sein, aber es gibt auch nach API-Ebene 14 einige Inkonsistenzen zwischen den API-Versionen. 

Verhalten: 

Zurück "<" - Bild wird angezeigt, funktioniert jedoch nicht, wenn gedrückt. .__ Als bewährte Methode verwende ich die Implementierung des Switch-Case, um das Event zurückzuschreiben. 

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

Es hat für mich funktioniert.

4
Handrey

Dieser Fehler ist aufgetreten, als ich die auf der Android-Entwicklerseite verfügbare Beispiel-App für die Navigations-Schublade ausprobierte. Es stellte sich heraus, dass MainActivity die ActionBarActivity nicht erweitert hat, und getActionBar() gibt null zurück, was die Ausnahme verursacht. 

1
irs8925

Keine der anderen Antworten funktionierte wirklich für mich. Ich habe das ganze if gerade auskommentiert und es hat funktioniert. Aus dem Methodennamen ( und Dokumentation ) benötigen Sie diese Funktionalität sowieso nicht (es sei denn, Sie möchten es), so dass kein Schaden entsteht.

Relevanter Dokumentationsauszug:

Legen Sie fest, ob das Heim als "Up" -Ersatz angezeigt werden soll. Stellen Sie dies ein auf true, wenn die Auswahl von "home" um eine Ebene in Ihrer Benutzeroberfläche erfolgt anstatt zurück zur obersten Ebene oder zur Titelseite.

Um mehrere Anzeigeoptionen gleichzeitig einzustellen, lesen Sie die setDisplayOptions Methoden.

Parameter 

showHomeAsUp true, um dem Benutzer anzuzeigen, dass Home ausgewählt wird kehren Sie eine Ebene zurück und nicht zur obersten Ebene der App.

0
marcelocra

Sie müssen mit Ihrer Aktivität ein Thema festgelegt haben, das nicht mit der Aktionsleiste kompatibel ist.

Also einfach das Theme überprüfen, mit dem Sie in Ihrer Manifest-Datei arbeiten, und es entfernen 

oder wenn Sie benutzerdefiniertes Design definiert haben, gehen Sie zu res-> values-> style.xml und machen Sie WindowActionBar auf true.

0
Vivek