Android

[Android]Attempt to invoke virtual method ‘io.realm.RealmQuery io.realm.Realm.where(java.lang.Class)’ on a null object reference

発生した事象

Android StudioでRealmを使いDB処理をしたときに以下のエラーがでました。


「java.lang.NullPointerException: Attempt to invoke virtual method ‘io.realm.RealmQuery io.realm.Realm.where(java.lang.Class)’ on a null object reference」

ちゃんとデータはあるはずなのに、

「~null object reference」
(「nullを参照してますよ」)

なんてメッセージが出ます。

原因

原因はデータベース処理の直前に「Realm.getDefaultInstance();」を宣言していないためでした。



mRealm = Realm.getDefaultInstance();
↑これがないと今回のエラーが発生する。


//Realmのデータベース処理
final Template template_del
 = mRealm.where(Template.class)
      .equalTo("id",template.getId())
      .findFirst();

mRealm.executeTransaction(new Realm.Transaction() {
 @Override
 public void execute(Realm realm) {
  template_del.deleteFromRealm();
 }
});

そりゃあ、Realmのインスタンス生成してなければ、ダメですよね・・・。

開発、慌て過ぎ。

そもそもコピペで開発しているからこんなことになるんですよね。。

恒久対策 未定・・・大いに反省

今回の失敗は、意味を理解して上から順にコード書けばこんなことににはならない。

根本的なものの考え方を変える必要があると感じました。

しかも、これ見つけるのに30分くらいかかったし、ダメすぎるだろう。。。

並のプログラマーは、まずこの間違いをしない上に、万が一間違っても数秒で気づく。


こういうことを気付けるようになるような訓練をしてたい。

何か思いついたら記事にします。

関連記事