1. ホーム
  2. android

getActionBarメソッドでjava.lang.NullPointerExceptionが発生する場合の対処方法

2023-09-10 06:46:57

質問

アクティビティでアクションバーとしてツールバーを使用しています。 私はメソッドを追加しようとしています getActionBar().setDisplayHomeAsUpEnabled(true); を Activity.java ファイルに追加して、古いデバイスのナビゲーションを改善しようとしています。

このメソッドは、Android Studioで次のようなエラーメッセージを生成します。

メソッド呼び出しにより、java.lang.NullPointerExceptionが発生する可能性があります。

ツールバーの上へのナビゲーションは、新しいデバイスで問題なく動作します...今、古いデバイスで動作することを確認する方法を考え中です。 アドバイスをお願いします。

build.gradleからです。

dependencies {
   compile "com.android.support:appcompat-v7:22.1.0"
}

AndroidManifest.xmlより。

android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen" 

styles.xmlより

<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>

Activity.javaから

public class CardViewActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.cardviewinput);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    if (toolbar != null) {
        // Up navigation to the parent activity for 4.0 and earlier
        getActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

}

どのように解決するのですか?

Android Studioでは、エラーメッセージは表示されず、警告が表示されるだけです。

いくつかの回答では、アサーションの使用を提案していますが、Dalvikランタイムは アサーション はデフォルトでオフになっているため、実際に何かを行うには実際にオンにする必要があります。この場合(アサーションがオフになっている)、本質的にやっていることは、警告を表示しないように Android Studio を騙しているだけです。また、私はプロダクション コードで "assert" を使用しないことを希望します。

私の意見では、あなたがすべきことは非常にシンプルです。

if(getActionBar() != null){
   getActionBar().setDisplayHomeAsUpEnabled(true);
}

更新しました。 サポートライブラリ版のAction Barを使用している場合、getActionBar()をgetSupportActionBar()に置き換える必要があります。

if(getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}