Код: Выделить всё
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
}
Код: Выделить всё
override suspend fun read(): Flow? {
return safeDaoRequest {
dao.read()
}
}
Кроме того, когда мы добавляем журналирование в раздел catch, мы ничего не получаем.
Подробнее здесь: https://stackoverflow.com/questions/791 ... dexception
Мобильная версия