1

I'm getting a crash report of room database not being able to execute a query because the database has already been closed. I tried reproducing this error but I can't seem to get it.

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/...
at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1950)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1890)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.execSQL(FrameworkSQLiteDatabase.java:240)
at android.arch.persistence.room.RoomOpenHelper.createMasterTableIfNotExists(RoomOpenHelper.java:131)
at android.arch.persistence.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.java:107)
at android.arch.persistence.room.RoomOpenHelper.onOpen(RoomOpenHelper.java:100)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.java:133)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:282)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:175)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:93)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
at android.arch.persistence.room.RoomDatabase.inTransaction(RoomDatabase.java:305)
at android.arch.persistence.room.InvalidationTracker$1.run(InvalidationTracker.java:281)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)

Database initialization code:

public static Database getDataBase(HomieApplication application) {
    return Room.databaseBuilder(application, Database.class, "Mydata").allowMainThreadQueries().fallbackToDestructiveMigration().build();
}

Dao:

@Dao
public interface SearchDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void saveQueries(List<SearchQuery> queries);

    @Query("DELETE FROM SearchQuery")
    void deleteAllSearchQueries();

    @Query("SELECT * FROM SearchQuery")
    LiveData<List<SearchQuery>> getSearchQueries();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void saveLastBounds(Bounds bounds);

    @Query("SELECT * FROM Bounds where id LIKE :id")
    Bounds getLastBounds(int id);
}
Kuti Gbolahan
  • 2,379
  • 1
  • 9
  • 17
  • Hii, remove fallbackToDestructiveMigration() and try –  Apr 16 '18 at 10:42
  • Thanks, but I cannot reproduce this error so I don't if that would fix it since this is a crash report from google play developer console. Also fallbackToDestructiveMigration() will only run if there is an error with migrations or database version, currently I have only one version of the database so no changes have been made to it. – Kuti Gbolahan Apr 16 '18 at 10:48

0 Answers0