BindView 問題 NULLオブジェクト参照で仮想メソッド 'void android ...' を呼び出そうとする
原因:java.lang.NullPointerException。
null オブジェクトの参照に対して仮想メソッド 'void android.support.v7.widget.Toolbar.setNavigationIcon(int)' を呼び出そうと試みました。
私側の問題は主に
ButterKnifeのバージョンアップ問題で、8.0.0以前のBindタグが8.0.0以降はBindViewになりました。
Bindを直接@BindViewに変更したところ、コンパイルは正常に行われますが、NULLポインターで実行されます。
問題は再発します。8.0以降でButterKnifeライブラリを追加すると、VIEWへのバインディング時にヌルポインタの問題が発生します。
例えば
解決策
ステップ1 プロジェクトのプロジェクトファイルbuild.gradleに依存関係のパスを追加します。
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
例えば
ステップ2. 依存するButterknife jarをモジュールモジュール(例:app)ファイルbuild.gradleに追加します。
implementation 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
例えば
ステップ3 ButterKnifeコンポーネントをインストールします。
ファイル -> 設定 -> プラグインを開き、ButterKnifeを検索して、android ButterKnife Zeleznyをインストールします。
というように。
最後にコンパイルして実行するとOkです。
バターナイフの使用に関して、以下のことに注意してください。
1. Activityクラスでのバインド : ButterKnife.bind(this); は setContentView(); の後にバインドする必要があり、親クラスがバインドした後は、子クラスは再度バインドする必要はありません。
2. アクティビティ以外のクラスでバインドする(例:Fragment、ViewHold)。ButterKnife.bind(this, view); ここで、これはgetActivity()に置き換えることはできません。
3. Activityでunbind操作をする必要はなく、FragmentのonDestroyView()でunbind操作をする必要があります。
4. 4. ButterKnifeで変更したメソッドやコントロールは、privateやstaticで変更できない場合、エラーが報告されます。エラーになります。BindViewフィールドはprivateまたはstaticであってはなりません。(com.zyj.wifi.ButterknifeActivity.button1)
5. setContentView()にアノテーションを付けることができない。(他のアノテーションフレームワークでは可能なものもある)。
6、Activityを使ってルートビューに任意のオブジェクトをバインドする場合、MVCのようなデザインパターンを使っていれば、Activity内でButterKnife.bind(this, activity)を呼んで、Controllerをバインドすることができます。
7. 7. ButterKnife.bind(this, view)を使用して、ビューの子フィールドをバインドします。子ビューのレイアウトやカスタムビューのコンストラクタで inflate を使用している場合、このメソッドをすぐに呼び出すことができます。また、XML inflateからのカスタムビュータイプでは、 onFinishInflateコールバックメソッドで使用することができます。
要約すると より実践的で自立的な思考
私のJavaとAndroidの逆引き開発交流QQグループに参加して、交流と勉強をすることを歓迎します。
関連
-
警告: 構成 'compile' は廃止され、'implementation' と 'api' に置き換わりました。
-
アプリの実行エラー。Default ActivityNot Found 完璧な解決策
-
ERROR: x86 エミュレーションには現在ハードウェアアクセラレーションが必要です。
-
Error:タスク ':app:compileDebugJavaWithJavac' の実行に失敗しました。解決方法
-
SolutionMethod がスーパークラスのメソッドをオーバーライドしない。
-
アプリケーションがメインスレで仕事をしすぎている可能性がある
-
Androidアプリ】【形状利用概要
-
Android TextViewの自動改行問題
-
Android - Androidに多階層メニュー連携操作を実装。
-
Androidエラー:このターゲットで使用できるCPU/ABIシステムイメージがありません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ADBサーバーがACKしない ソリューション
-
Android リソースのリンクに失敗する、解決方法
-
アプリがGoogle検索でインデックスされない
-
AndroidManifest.xml は、アプリが Google 検索でインデックス化されていないことを警告しています。
-
Android Studioで「Error:SSL peer shut down incorrectly」というエラーが表示される。
-
Intellij Ideaは、シンボルが見つからない、RクラスまたはRパッケージが存在しない、というエラーを報告します。
-
アンドロイドアンダーライン(図形入り
-
Mac OS X用Android Studioショートカット
-
android.view.inflateexception バイナリ xml ファイル行例外の解決方法
-
Android AVDで "このターゲットにはシステムイメージがインストールされていません "と表示される