Сбой Android Room не может начать транзакцию внутри транзакцииAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сбой Android Room не может начать транзакцию внутри транзакции

Сообщение Anonymous »

В моем приложении для Android есть база данных номеров. Недавнее изменение привело к сбоям:

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

Fatal Exception: android.database.sqlite.SQLiteException: cannot start a transaction within a transaction (code 1 SQLITE_ERROR[1])
at android.database.sqlite.SQLiteConnection.nativeExecute(SQLiteConnection.java)
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:1033)
at android.database.sqlite.SQLiteSession.beginTransactionUnchecked(SQLiteSession.java:321)
at android.database.sqlite.SQLiteSession.beginTransaction(SQLiteSession.java:300)
at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:970)
at android.database.sqlite.SQLiteDatabase.beginTransactionNonExclusive(SQLiteDatabase.java:904)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.beginTransactionNonExclusive(FrameworkSQLiteDatabase.kt:59)
at androidx.room.RoomDatabase.internalBeginTransaction(RoomDatabase.kt:527)
at androidx.room.RoomDatabase.beginTransaction(RoomDatabase.kt:511)
at myapp.data.dao.DocumentDao_Impl$updatePosition$2.call(DocumentDao_Impl.java:1576)
at myapp.data.dao.DocumentDao_Impl$updatePosition$2.call(DocumentDao_Impl.java:1566)
at androidx.room.CoroutinesRoom$Companion$execute$2.invokeSuspend(CoroutinesRoom.kt:64)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at androidx.room.TransactionExecutor.execute$lambda$1$lambda$0(TransactionExecutor.java:36)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Дао для звонка:

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

@Query("update document set bookmarkLocation=:position, bookmarkLength=:length where documentId=:documentId")
abstract suspend fun updatePosition(
documentId: String,
position: Int,
length: Int
)
Транзакция не используется. Над ним нет ничего, что запускало бы транзакцию. В сущности нет ничего сложного. Я этого не понимаю, я широко использовал Room. Почему это простое обновление вызывает проблемы? Это происходит на производстве. Я не видел этого в тестировании. В рабочей среде это вызывает сбои примерно у 1 % моих пользователей.

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

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

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

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

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

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