モバイル用高速データベース「Realm」を使うアプリで、正しくコーディングできているにもかかわらず、
「RealmException ◯◯ Is Not Part Of The Schema For This Realm」(◯◯はモデルクラス)
という謎のエラーによって、アプリが落ちてしまう場合の対処法です。
結論から言うと、
appレベルのbuild.gradleの冒頭部分のプラグインを並べる順番の問題らしく、realmは一番下にしないといけない
ようです。ですので、
もくじ
1)’apply plugin: ‘realm-android’ を一番下にして「Sync now」
こうではなく
apply plugin: 'com.android.application' apply plugin: 'realm-android' ⇒ これを一番下に持っていかないといけないらしい apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'
こうする
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'realm-android' ⇒ こんな感じ
2)kotlin-kaptプラグインを追加する(appレベルのbuild.gradle)
そのとき、アプリを動かすと、
Cause: app: Original kapt is deprecated. Please add "apply plugin: 'kotlin-kapt'" to your build.gradle.
こんなことを言われるので(Buildタブで見ることができます)、
メッセージ通りにapply plugin: 'kotlin-kapt
をこんな感じで追加(’realm-android’の直上に)
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' ⇒ これ apply plugin: 'realm-android'
3)再度「Sync now」する
4)端末に入っているこの単語帳アプリをアンインストール
アンインストールを忘れると、こんな感じのエラーがでて止まってしまうと思います。
io.realm.exceptions.RealmMigrationNeededException:
5)もう一度アプリを回すと、エラーが解消できる
ということで、appレベルの「build.gradle」の「apply-plugin」を並べる順番が悪かったという、「なんじゃそれ!?」的な話です。
理由がどうでもいいという方は、やり方だけを知っておけば十分かと思います。
理由が知りたい方は、下の動画で解説していますので、ご興味あればご覧ください。