Room利用時のエラーと対処方法【Androidアプリ開発】

Roomを実装した際に遭遇したエラーと対処方法をまとめていきます。

Roomの実装方法はこちらで紹介しています。

Schema export directory is not provided to the annotation processor so we cannot export the schema.

スキーマをエクスポートするディレクトリを指定する。もしくは、”export=false”を指定する。

”export=false” を指定する場合は、@Databaseアノテーションの宣言時に指定する。

@Database(entities = [User::class], version = 1, exportSchema = false)

java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

非同期で実装する。

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

DBを変更した場合にバージョンを上げないといけない。

バージョンを変更するには、 @Databaseアノテーションの”version”の数字を変える。

@Database(entities = [User::class], version = 1, exportSchema = false)

A migration from 1 to 2 was required but not found

バージョンを上げた場合に、変更内容を書かないといけない。

新しくテーブルを追加した場合はCreate、カラム変更をした場合はAlter Tableといったように変更内容に応じて処理を書く必要がある。

fun getDatabase(context: Context): AppDatabase {
    val MIGRATION_1_2: Migration = object : Migration(1, 2) {
        override fun migrate(database: SupportSQLiteDatabase) {
          //バージョン1→2にあげる処理
        }
    }

    return INSTANCE ?: synchronized(this) {
        val instance = Room.databaseBuilder(
            context.applicationContext,
            AppDatabase::class.java,
            "user_database")
            .addMigrations(MIGRATION_1_2) //バージョン1→2にあげる処理
            .build()
        INSTANCE = instance
        // return instance
        instance
    }
}
Androidアプリ開発
この記事を書いた人

エンジニアとして仕事をしています。
仕事や趣味を通して、開発やプログラミングについて学んだことを綴っていきます。
 ・実務経験は、WEBシステムのサーバーサイドコーディングがメイン
 ・アプリ開発は趣味程度

akihiro-takedaをフォローする
akihiro-takedaをフォローする
プログラミング・開発の備忘録
タイトルとURLをコピーしました