2.11
およびルームバージョン1.0.0-alpha7
。エラーはバージョン1.0.0-alpha5
で再現可能でした。ルームの試みすでに閉じられたデータベース
このエラーは、データベースを初期化してクラスに注入した後、DAOを介してデータベースにアクセスしようとしたときに発生しました。
2.11
およびルームバージョン1.0.0-alpha7
。エラーはバージョン1.0.0-alpha5
で再現可能でした。ルームの試みすでに閉じられたデータベース
このエラーは、データベースを初期化してクラスに注入した後、DAOを介してデータベースにアクセスしようとしたときに発生しました。
でファイルを削除します。どちらか、そうするには
移行情報を提供することはありません。したがって、基本的には、新しいデータベーススキーマを動作しない既存のDBに書き込もうとします。
これには2つの方法があります。あなたは何ができるか、あなたの開発環境である場合は、このデータベースの作成コードを行うには、破壊的な移行にフォールバックされ、次のようなものになります。
MyDatabase myDatabase = Room.databaseBuilder(context, MyDatabase.class, "my-db")
.fallbackToDestructiveMigration()
.build();
を更新したかでデータベースを提供する場合これは、新しいエンティティは、@huwからの答えを示し、アプリケーションのインストール時にデータベースを削除して、そこからすべてのデータを削除し、新しくインストールします。
もう1つの方法は、移行機能を使用することです。彼らは、誰かが私がここでそれを書きたい場合を除き、私は今が、基本的のためにそれを残しておきますので、かなりの長さで、ドキュメントはここで見つけることができます:
Room DB Migration Documentation
これは、基本的にDBが提供されるいくつかのSQLを実行する原因となります自分でデータベースを新しいバージョンに更新します。これにより、移行中にデータが失われないようにすることができます。あなたがやっていることに応じてできるだけ少なくしてください。これは、ユーザーが既存のデータを失うことなく、怒っているレビューや紛失した顧客をたくさん得られないことを意味するため、プロダクションアプリにとっては好ましい方法です。
希望は役立ちます!
この問題の解決策の1つは、データベースファイルを削除して再開することでした。これは問題ではありませんでした。私はテストをしていたので、オンラインデータを使用してデータベースを再作成することができました。
/data/data/com.app.example/databases/database.db
@Databaseアノテーションでデータベースバージョンを変更することを忘れないでください。 fallbackToDestructiveMigration()は、DB構造が変更されただけでDBをリセットしません。 – Andrew