API 23 डिवाइस पर एंड्रॉइड रूम लाइब्रेरी का उपयोग करते समय "रोलबैक नहीं - कोई लेनदेन सक्रिय नहीं है (कोड 1)"

वोट
48

मुझे यह त्रुटि तब हो रही है जब मैं रूम लाइब्रेरी का उपयोग करके एपीआई 23 डिवाइस पर अपना ऐप चलाता हूं। यह पहले लॉन्च पर होता है, लेकिन मैं ऐप में अपना परिचय पिछले नहीं दे सकता क्योंकि यह हर बार होता है।

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)

यह एपीआई 24 और इसके बाद के संस्करण पर नहीं होता है। यह एक बग है? इस तरह से मैं अपने कमरे का डेटाबेस बनाता हूं:

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
        }

और मैं इसका उपयोग कैसे करता हूं:

 private var cardMasterDao: CardMasterDao? = null

    init {
        cardMasterDao = when {
            CardMasterDatabase.INSTANCE != null -> {
                CardMasterDatabase.INSTANCE!!.cardMasterDao()
            }
            else -> {
                CardMasterDatabase.getAppDatabase(context)!!.cardMasterDao()
            }
        }
    }
18/05/2020 को 07:45
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            

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