Android-приложение, использующее Room, загруженное в производство без миграции - PullRequest
0 голосов
/ 21 февраля 2019

Я добавил поле в модель моего приложения.

Локальное постоянство модели управляется Room Persistence Library .

К сожалению, забыл создать Миграция и загрузка новой версии приложения в Google Play.

Теперь некоторые люди не могут открыть приложение.Он автоматически закрывается при открытии.Вот трассировка стека, которую я получаю на консоли Google Play.

java.lang.IllegalStateException: 
  at android.database.sqlite.SQLiteClosable.acquireReference (SQLiteClosable.java:55)
  at android.database.sqlite.SQLiteDatabase.executeSql (SQLiteDatabase.java:2197)
  at android.database.sqlite.SQLiteDatabase.execSQL (SQLiteDatabase.java:2142)
  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:349)
  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:238)
  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:1162)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
  at java.lang.Thread.run (Thread.java:764)

Я не могу просто сгенерировать миграцию сейчас, потому что другие миграции уже могли выполняться для некоторых пользователей.Я думаю, что у новых пользователей проблема уже решена, поэтому они также не могут запустить миграцию.

Примечание. Сохраненные данные не очень важны, поэтому, если я уроню их, это не будет большой проблемой.всю базу данных и создал ее снова.

Как я могу выполнить это действие DROP DATABASE, когда я ловлю IllegalStateException?Или есть лучшее решение для этого?

...