1. ホーム
  2. アンドロイド

Android開発で「Attempt to invoke virtual method 'XXX()' on null object reference」というヌルポインター例外に遭遇する。

2022-02-10 14:01:11
<パス

Android開発で発生したNull pointer exception "Nullオブジェクトの参照に対して仮想メソッド'XXX()'を呼び出そうとする" の件

最初、私のコードは次のようなものでした。

 @BindView(R.id.rg_secondary)
    RadioGroup rdGroup;

protected void onCreate(@Nullable Bundle savedInstanceState) {
      setContentView(R.layout.yougou_home);
      rdGroup.check(R.id.rg_btn1);
}


コントロールをバインドするためにbutterknifeプラグインを使用しました。エラーの意味がわからず、check()メソッドのパラメータに問題があるのではと思いました。作業は3時間くらいかかりました。
その後、正常に機能する他のjavaファイルにコードを移植したところ、ページが正常に読み込まれ、コントロールも正常に機能するようになりました。その後、エラーメッセージの意味を詳しく調べ、元のjavaファイル内のデバッグ用コードを Log.d(TAG, rdGroup.getId()+""); 案の定、rdGroupのIdが取得できない。

そこで、butterKnife を使ってコントロールをバインドするコードを削除し、代わりに通常のメソッドを使ってコントロールをバインドしてみました。

protected void onCreate(@Nullable Bundle savedInstanceState) {
      setContentView(R.layout.yougou_home);
      rdGroup=this.findViewById(R.id.rg_secondary);
      rdGroup.check(R.id.rg_btn1);
}


ページが正しく表示されます。
しかし、疑問が残ります。以前の開発ではbutterKnifeのバインドコントロールは問題なかったのに、なぜここではうまくいかないのでしょうか?

要約すると
エラーレポートにあるオブジェクトは、メソッドに渡されたパラメータではなく、このメソッドを呼び出したオブジェクトを指しています、これを間違えて時間を浪費するのは愚かなことです。これからも練習してどんどん間違えて経験を積んでください。