5

2.11およびルームバージョン1.0.0-alpha7。エラーはバージョン1.0.0-alpha5で再現可能でした。ルームの試みすでに閉じられたデータベース

このエラーは、データベースを初期化してクラスに注入した後、DAOを介してデータベースにアクセスしようとしたときに発生しました。

答えて

19

でファイルを削除します。どちらか、そうするには

移行情報を提供することはありません。したがって、基本的には、新しいデータベーススキーマを動作しない既存のDBに書き込もうとします。

これには2つの方法があります。あなたは何ができるか、あなたの開発環境である場合は、このデータベースの作成コードを行うには、破壊的な移行にフォールバックされ、次のようなものになります。

MyDatabase myDatabase = Room.databaseBuilder(context, MyDatabase.class, "my-db") 
    .fallbackToDestructiveMigration() 
    .build(); 

を更新したかでデータベースを提供する場合これは、新しいエンティティは、@huwからの答えを示し、アプリケーションのインストール時にデータベースを削除して、そこからすべてのデータを削除し、新しくインストールします。

もう1つの方法は、移行機能を使用することです。彼らは、誰かが私がここでそれを書きたい場合を除き、私は今が、基本的のためにそれを残しておきますので、かなりの長さで、ドキュメントはここで見つけることができます:

Room DB Migration Documentation

これは、基本的にDBが提供されるいくつかのSQLを実行する原因となります自分でデータベースを新しいバージョンに更新します。これにより、移行中にデータが失われないようにすることができます。あなたがやっていることに応じてできるだけ少なくしてください。これは、ユーザーが既存のデータを失うことなく、怒っているレビューや紛失した顧客をたくさん得られないことを意味するため、プロダクションアプリにとっては好ましい方法です。

希望は役立ちます!

+2

@Databaseアノテーションでデータベースバージョンを変更することを忘れないでください。 fallbackToDestructiveMigration()は、DB構造が変更されただけでDBをリセットしません。 – Andrew

5

この問題の解決策の1つは、データベースファイルを削除して再開することでした。これは問題ではありませんでした。私はテストをしていたので、オンラインデータを使用してデータベースを再作成することができました。

  • アプリ情報>ストレージ>データクリア
  • 手動で既存のデータベースのスキーマを変更しようとしているためです/data/data/com.app.example/databases/database.db
関連する問題