発生した事象
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分くらいかかったし、ダメすぎるだろう。。。
並のプログラマーは、まずこの間違いをしない上に、万が一間違っても数秒で気づく。
こういうことを気付けるようになるような訓練をしてたい。
何か思いついたら記事にします。