Приложение Android не работает с SQLiteDatabaseLockedExceptionAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение Android не работает с SQLiteDatabaseLockedException

Сообщение Anonymous »

В нашем приложении для Android возникает следующая фатальная ошибка:

Код: Выделить всё

Fatal Exception: android.database.sqlite.SQLiteDatabaseLockedException database is locked (code 5 SQLITE_BUSY)

android.database.sqlite.SQLiteConnection.nativeExecute (SQLiteConnection.java)
android.database.sqlite.SQLiteConnection.execute (SQLiteConnection.java:648)
android.database.sqlite.SQLiteSession.beginTransactionUnchecked (SQLiteSession.java:325)
android.database.sqlite.SQLiteSession.beginTransaction (SQLiteSession.java:300)
android.database.sqlite.SQLiteDatabase.beginTransaction (SQLiteDatabase.java:568)
android.database.sqlite.SQLiteDatabase.beginTransaction (SQLiteDatabase.java:478)
androidx.sqlite.db.framework.FrameworkSQLiteDatabase.beginTransaction (FrameworkSQLiteDatabase.kt:55)
androidx.room.RoomDatabase.internalBeginTransaction (RoomDatabase.kt:529)
androidx.room.RoomDatabase.beginTransaction (RoomDatabase.kt:511)
androidx.work.impl.WorkerWrapper.trySetRunning (WorkerWrapper.java:487)
androidx.work.impl.WorkerWrapper.runWorker (WorkerWrapper.java:266)
androidx.work.impl.WorkerWrapper.run (WorkerWrapper.java:144)
androidx.work.impl.utils.SerialExecutorImpl$Task.run (SerialExecutorImpl.java:96)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:919)

Мы попробовали несколько методов, чтобы обнаружить ошибку, предложенную другими:

Код: Выделить всё

suspend fun  safeDaoRequest(
maxRetries: Int = 3,
delayMillis: Long = 1000,
action: suspend () -> T
): T? {
var attempt = 0
while (attempt < maxRetries) {
try {
return action()
} catch (t: Throwable) {

attempt++
if (attempt >= maxRetries) {
return null
}
delay(delayMillis)
}
}
return null
}

Вызов dao передается функции следующим образом:

Код: Выделить всё

    override suspend fun read(): Flow? {
return safeDaoRequest {
dao.read()
}
}

Дело в том, что трассировка стека не показывает никакого нашего кода.
Кроме того, когда мы добавляем журналирование в раздел catch, мы ничего не получаем.

Подробнее здесь: https://stackoverflow.com/questions/791 ... dexception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»