"Impossible de revenir en arrière - aucune transaction n'est active (code 1)" lorsque vous utilisez la bibliothèque Android Room sur un appareil API 23

voix
48

Je reçois cette erreur lorsque j'exécute mon application sur un périphérique API 23 en utilisant la bibliothèque Room. Cela se produit lors du premier lancement, mais je ne peux pas dépasser mon introduction dans l'application car cela se produit à chaque fois.

Fatal Exception: android.database.sqlite.SQLiteException: cannot rollback - no transaction is active (code 1)
       at android.database.sqlite.SQLiteConnection.nativeExecute(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:553)
       at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:439)
       at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
       at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:522)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:262)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:92)
       at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:53)
       at androidx.room.SQLiteCopyOpenHelper.getWritableDatabase(SQLiteCopyOpenHelper.java:90)
       at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:476)
       at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:281)
       at com.diamonddevelopment.cardapp.data.CardMasterDao_Impl.getAllTags(CardMasterDao_Impl.java:1381)
       at com.diamonddevelopment.cardapp.data.AppRepository.getAllTags(AppRepository.kt:158)
       at com.diamonddevelopment.cardapp.activities.MainActivity$Companion$loadTags$1.run(MainActivity.kt:316)
       at java.lang.Thread.run(Thread.java:818)

Cela ne se produit pas sur les API 24 et supérieures. S'agit-il d'un bogue ? C'est ainsi que je crée ma base de données de salles :

fun getAppDatabase(context: Context): CardMasterDatabase? {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(context.applicationContext, CardMasterDatabase::class.java, FILE_NAME).createFromAsset(databases/$FILE_NAME).build()
            }
            return INSTANCE
        }

Et comment je l'utilise :

 private var cardMasterDao: CardMasterDao? = null

    init {
        cardMasterDao = when {
            CardMasterDatabase.INSTANCE != null -> {
                CardMasterDatabase.INSTANCE!!.cardMasterDao()
            }
            else -> {
                CardMasterDatabase.getAppDatabase(context)!!.cardMasterDao()
            }
        }
    }
Créé 18/05/2020 à 07:45
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more