LoginSignup
6
1

More than 3 years have passed since last update.

再インストールしてもRoomがVersionが違うとクラッシュし続ける場合の対処法

Last updated at Posted at 2020-09-15

RoomでSchemaを変更したにもかかわらずDatabaseのバージョンを変更していないと以下のログが出てクラッシュします。

java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.

おっしゃるとおり、Versionを上げてMigrationを書くのが正攻法なのですが、開発中でまだ定義が定まっていない時に毎回Versionを上げてMigartionを書くのは馬鹿らしいですよね。開発中のデータなんて消えても問題ないのであれば、schemaを変更したときはversionを上げて fallbackToDestructiveMigration で消しちゃえばいいです。

        Room.databaseBuilder(
            context,
            RoomDatabase::class.java,
            "room_database"
        )
            // Version違ってMigrationなかったら消しちゃう
            .fallbackToDestructiveMigration()
            .build()

とはいっても、毎回versionを変えるのすらめんどくさい。そういうときもあるとおもいます。人間ですからね。そんなときはアプリを再インストールすればマイグレーションもなにも無いだろうと思うかもしれませんが、再インストールしてもMigrationコードが無いとクラッシュする場合があります。

これは、 AndroidManifest.xmlandroid:allowBackup=true が設定されているとDB情報がバックアップされてしまうからです。 allowBackup はデフォルトでtrueが設定されているため、明示的にfalseを設定してあげないといけません。アンインストールしてもVersionが違うとクラッシュし続ける場合は確認してみましょう。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1