このチュートリアル をフォローしており、このコードブロックで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がスローされるのはなぜですか?
getActionBar()
をgetSupportActionBar()
または((ActionBarActivity)getActivity()).getSupportActionBar()
に変更してみてください。
ActionBar
をサポートしていないテーマを使用している可能性があります。したがって、getActionBar()
メソッドはNullPointerException
をスローします。
このテーマを使用してみてください:
Android:theme="@Android:style/Theme.Holo.Light"
同じ問題がありました。
マニフェストのアクティビティで私は宣言しました
Android:theme="@Android:style/Theme.Black.NoTitleBar
エラーが発生しました。この行を削除した後、アクションバーは正常に機能しました。
必要ではありませんが、APIレベル14以降でも、APIバージョン間でいくつかの動作の不一致があります。
動作:
戻る「<」画像が表示されますが、押すと機能しません。バックイベントを処理するために、スイッチケースの実装に使用することをお勧めします。
@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
全体をコメントアウトしただけで機能しました。メソッド名( およびドキュメント )から、とにかく(必要でない限り)その機能は必要ないので、害はありません。
関連するドキュメントの抜粋:
ホームを「アップ」アフォーダンスとして表示するかどうかを設定します。 「ホーム」を選択すると、トップレベルまたはフロントページに戻るのではなく、UIで1レベルずつ戻る場合は、これをtrueに設定します。
複数の表示オプションを一度に設定するには、setDisplayOptionsメソッドを参照してください。
パラメータ
showHomeAsUp
trueは、ホームを選択すると、アプリのトップレベルではなく1レベル上に戻ることをユーザーに示します。
アクションバーと互換性のないアクティビティでテーマを設定する必要があります。
テーマを確認で使用しているマニフェストファイルと削除
またはカスタムテーマを定義している場合res-> values-> style.xmlに移動してWindowActionBar to true。を作成します