20

私はこのチュートリアルに従い、このコード ブロックの 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 がスローされるのはなぜですか?

4

7 に答える 7

31

またはに変更getActionBar()してみてください。getSupportActionBar()((ActionBarActivity)getActivity()).getSupportActionBar()

于 2015-02-20T16:34:36.997 に答える
31

をサポートしていないテーマを使用している可能性がありActionBarます。したがってgetActionBar()、メソッドは をスローしNullPointerExceptionます。

このテーマを使用してみてください:

android:theme="@android:style/Theme.Holo.Light"
于 2014-10-18T21:33:07.940 に答える
10

私も同じ問題を抱えていました。

私が宣言したマニフェストの活動で

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

エラーの原因。この行を削除した後、私のアクションバーは正常に機能しました。

于 2013-10-16T21:02:50.687 に答える
4

必須ではありませんが、API レベル 14 以降でも API バージョン間で動作の不一致がいくつかあります。

行動:

戻る「<」画像は表示されるが、押しても動かない。バックイベントを処理するために、switch ケースを実装することをお勧めします。

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

それは私のために働いた。

于 2014-06-06T14:30:06.903 に答える
0

実際、他の答えはどれもうまくいきませんでした。その全体をコメントアウトしただけifで、うまくいきました。メソッド名 (およびドキュメント) から、とにかくその機能は必要ないので (必要でない限り)、害はありません。

関連ドキュメントの抜粋:

ホームを「上」アフォーダンスとして表示するかどうかを設定します。「ホーム」を選択すると、トップ レベルまたはフロント ページに戻るのではなく、UI で 1 レベル上に戻る場合は、これを true に設定します。

一度に複数の表示オプションを設定するには、setDisplayOptions メソッドを参照してください。

パラメーター

showHomeAsUp ホームを選択すると、アプリのトップ レベルではなく 1 つ上のレベルに戻ることをユーザーに示す場合は true。

于 2015-09-26T03:47:22.130 に答える