getActionBarメソッドでjava.lang.NullPointerExceptionが発生する場合の対処方法
質問
アクティビティでアクションバーとしてツールバーを使用しています。 私はメソッドを追加しようとしています
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);
}
関連
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?