Справочная информация: По сути, мы ежемесячно выпускаем новую версию нашего приложения с обновленной базой данных (которая предварительно заполнена).Чтобы убедиться, что у пользователя самые последние данные, мы используем 'setForcedUpgrade ()' в конструкторе.
Проблема: В последнее время (в основном версия Android 9, также несколько раз встречающаяся в 8.1) мы получали отчеты о сбояхна консоли Google Play:
java.lang.RuntimeException:
at android.os.AsyncTask$3.done (AsyncTask.java:366)
at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
at java.util.concurrent.FutureTask.setException (FutureTask.java:252)
at java.util.concurrent.FutureTask.run (FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:784)
Caused by: android.database.sqlite.SQLiteException:
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase (SQLiteAssetHelper.java:266)
at ...
Я пошел проверить SQLiteAssetHelper.java:266 и обнаружил:
if (db.getVersion() != mNewVersion) {
throw new SQLiteException("Can't upgrade read-only database from version " +
db.getVersion() + " to " + mNewVersion + ": " + path);
}
Итак, я подозреваю, что, возможно, обновление базы данныхЕще не завершено к тому времени, когда мы снова пытаемся получить доступ к базе данных.Но я понятия не имею, как это исправить.Моей первой мыслью было «послушать», когда обновление завершится, прежде чем позволить пользователю продолжить работу с приложением, но я не смог найти способ сделать это.
Также обратите внимание, что база данных уже находится на версии 23, поэтому мы ее не так давно изменили (ошибка новая).
Любые предложения будут с благодарностью.
Упрощенная версия помощника:
public class MyDBHelper extends SQLiteAssetHelper {
/** The database version. */
private static final int DATABASE_VERSION = 24;
/** The name of the database. */
private static final String DATABASE_NAME = "myDB.db";
public MyDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
setForcedUpgrade();
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Empty
}
}