首页 > 解决方案 > 未创建 Kotlin Room 数据库

问题描述

当我尝试在设备文件资源管理器中检查我的数据库文件时,那里什么也没有。所以这意味着我的房间数据库没有被创建,但我没有一个错误。我还将数据添加到我的数据库中,因此这意味着一定会出现问题,但它并没有表明出现问题。有人知道出了什么问题吗?

我的数据库类:

@Database(entities = [FietsItem::class, Merk::class], version = 1, exportSchema = false)
abstract class FietsDatabase : RoomDatabase() {
    abstract fun fietsDao(): FietsDao
    abstract fun merkDao(): MerkDao

companion object{
    @Volatile
    private var databaseInstance: FietsDatabase? = null

    fun getDatabaseInstance(mContext: Context, scope:CoroutineScope): FietsDatabase {
        return databaseInstance?: synchronized(this){
            databaseInstance?: buildDatabaseInstance(mContext, scope).also{ databaseInstance=it}
        }
    }

    private fun buildDatabaseInstance(mContext: Context, scope:CoroutineScope) : FietsDatabase {
        return Room.databaseBuilder(
            mContext, FietsDatabase::class.java,
            DB_NAME
        )
            .fallbackToDestructiveMigration()
            //.createFromAsset("database/FietsVerkoop.db")
            .addCallback(FietsDatabaseCallback(scope))
            .allowMainThreadQueries()
            .build()
    }

    private class FietsDatabaseCallback(
        private val scope: CoroutineScope
    ) : RoomDatabase.Callback() {
        /**
         * Override the onOpen method to populate the database.
         * For this sample, we clear the database every time it is created or opened.
         */
        override fun onOpen(db: SupportSQLiteDatabase) {
            super.onOpen(db)
            // If you want to keep the data through app restarts,
            // comment out the following line.
            databaseInstance?.let { database ->
                scope.launch(Dispatchers.IO) {
                    populateDatabase(database.merkDao(), database.fietsDao())
                }
            }
        }
    }

    fun populateDatabase(merkDao: MerkDao, fietsDao: FietsDao){
        merkDao.deleteAll()
        fietsDao.deleteAll()


            var merk1 : Merk = Merk(MerkNaam = "Moustache")
            merkDao.insertMerk(merk1)
            var fietsItem1 : FietsItem = FietsItem(Merk = merk1.MerkID, Type = "Dimanche 29.3", Autonomie = 50,
                Beschrijving = "De Dimanche 29.3 zal aan al uw wensen voldoen en nieuwe deuren openen dankzij het ‘smiling machines’-dna van Moustache. " +
                        "Uw plaatselijke trails verkennen of genieten van uw dagelijkse rit naar het werk – het gaat over plezier hebben en van uw rit " +
                        "genieten!", Prijs = 3499.00)
        fietsDao.insertFietsItem(fietsItem1)
            var fietsItem2: FietsItem = FietsItem(Merk = merk1.MerkID, Type = "BROMPTON H3LU", Autonomie = 30,
                Beschrijving = "Een nieuw frame dat zowel comfortabel als dynamisch is, de geïntegreerde Bosch 500 Wh PowerTube-accu, " +
                        "de Bosch Active Line Plus-motor, een in de hoogte aanpasbare vork met 63 mm veerweg en een geveerde zadelpen " +
                        "geven 40 mm extra comfort, zonder de superpraktische accessoires te vergeten die u helpen om u leven makkelijker " +
                        "te maken, zoals ons nieuw bagagerek dat compatibel is met de QL3 en MIK-bevestigingsstandaarden.", Prijs = 2499.00)
        fietsDao.insertFietsItem(fietsItem2)
            var fietsItem8 : FietsItem = FietsItem(Merk = merk1.MerkID, Type = "BROMPTON M3LU", Autonomie = 45,
                Beschrijving = "Een nieuw frame dat zowel comfortabel als dynamisch is, de geïntegreerde Bosch 500 Wh PowerTube-accu, " +
                        "de Bosch Active Line Plus-motor, een in de hoogte aanpasbare vork met 63 mm veerweg en een geveerde zadelpen " +
                        "geven 40 mm extra comfort, zonder de superpraktische accessoires te vergeten die u helpen om u leven makkelijker " +
                        "te maken, zoals ons nieuw bagagerek dat compatibel is met de QL3 en MIK-bevestigingsstandaarden.",
                Prijs = 1475.00)
        fietsDao.insertFietsItem(fietsItem8)
            var merk2 : Merk = Merk(MerkNaam = "Trek")
            merkDao.insertMerk(merk2)
            var fietsItem3 : FietsItem = FietsItem(Merk = merk2.MerkID, Type = "FLYER UPSTREET5 7.23", Autonomie = 65,
                Beschrijving = "Of het nu op de weg is, op een snelle woon-werkverplaatsing, " +
                        "of wanneer u op een landweggetje gaat rijden, de Upstreet5 maakt van e-mobiliteit een belevenis! " +
                        "Een krachtige Panasonic motor, een uitgebalanceerde geometrie en stabiele 28-inch wielen met " +
                        "brede banden garanderen rijcomfort en veiligheid. Uitgekiende innovaties, zoals de bijzonder intuïtieve bediening " +
                        "van het kleurendisplay en de aandrijving – met de optie van volautomatisch schakelen – en de onderhoudsarme riemaandrijving, " +
                        "zorgen voor onbeperkt rijplezier. De Upstreet5 is ook verkrijgbaar als snelle versie met trapondersteuning tot 45 km/u.",
                Prijs = 4999.00)
        fietsDao.insertFietsItem(fietsItem3)
            var fietsItem9 : FietsItem = FietsItem(Merk = merk2.MerkID, Type = "TREK RAIL 9.8", Autonomie = 75,
                Beschrijving = "De nieuwe, sterk verbeterde Bosch motor is kleiner, " +
                        "lichter en efficiënter. Hij voelt natuurlijker aan tijdens het " +
                        "trappen en heeft minder weerstand als je niet trapt.;De Rail knalt net " +
                        "zo hard naar beneden als zijn niet-elektrische kompaan, en even hard weer " +
                        "omhoog – lift of shuttlebus zijn niet meer nodig;De Removable Integrated Battery " +
                        "(RIB) van Trek ziet er perfect uit en is extreem gebruiksvriendelijk: hij zit volledig verzonken " +
                        "in het frame en is daardoor goed beschermd.",
                Prijs = 7199.00)
        fietsDao.insertFietsItem(fietsItem9)
            var fietsItem10 : FietsItem = FietsItem(Merk = merk2.MerkID, Type = "TREK DUAL SPORT 2 EQUIPPED", Autonomie = 45,
                Beschrijving = "Waarom zou je kiezen tussen asfalt en bospad? " +
                        "De Dual Sport is een veelzijdige hybride die uitblinkt op verschillende soorten terrein. " +
                        "De lockout op de voorvork garandeert dat je altijd zo efficiënt mogelijk rijdt: gesloten op gladde, " +
                        "verharde wegen; open op ruwere trails. Hij is uitgerust met verlichting, spatborden en een achterdrager " +
                        "dus je kunt direct op pad gaan. Een breed versnellingenbereik betekent dat je nooit te hard of te zacht hoeft te trappen, " +
                        "zelfs niet op de steilste heuvels.",
                Prijs = 649.00)
        fietsDao.insertFietsItem(fietsItem10)
            var merk3 : Merk = Merk(MerkNaam = "Gazelle")
            merkDao.insertMerk(merk3)
            var fietsItem4 : FietsItem = FietsItem(Merk = merk3.MerkID, Type = "GAZELLE AMI C7 HMS", Autonomie = 45,
                Beschrijving = "Comfort, veiligheid én ontspannen rijplezier gaan in de Gazelle Ami heel goed samen. Door de brede, lage instap kun je er heel gemakkelijk op gaan zitten – en daarbij je beide voeten op de grond houden." +
                        " Datzelfde veilige gevoel heb je met remmen: zodra je weer stil staat, zet je beide voeten weer aan de grond. Gewoon heerlijk fietsen met krachtige ondersteuning.",
                Prijs = 2499.00)
        fietsDao.insertFietsItem(fietsItem4)
            var fietsItem5 : FietsItem = FietsItem(Merk = merk3.MerkID, Type = "GAZELLE VENTO T24", Autonomie = 45,
                Beschrijving = "Op de Vento T24 vlieg je over de weg. En dankzij slimme oplossingen zoals " +
                        "weggewerkte kabels is deze Gazelle praktisch onverwoestbaar. Ideaal als je sportieve " +
                        "tochten afwisselt met ritjes door de drukke stad.",
                Prijs = 699.00)
        fietsDao.insertFietsItem(fietsItem5)
            var fietsItem6 : FietsItem = FietsItem(Merk = merk3.MerkID, Type = "GAZELLE MISS GRACE", Autonomie = 45,
                Beschrijving = "Miss Grace: de naam zegt het al. Een elegante fiets in " +
                        "eigentijds design die inspeelt op de wensen van moderne vrouwen. " +
                        "Duurzaam en met een milieubewuste uitstraling. Kan tegen een stootje en " +
                        "biedt veel praktische bagageruimte. Naafdynamo en kwalitatief hoogwaardige " +
                        "onderdelen zorgen ervoor dat Miss Grace met heel weinig onderhoud tevreden is.",
                Prijs = 699.00)
        fietsDao.insertFietsItem(fietsItem6)
            var fietsItem7 : FietsItem = FietsItem(Merk = merk3.MerkID, Type = "GAZELLE HEAVYDUTYNL C7 HMB", Autonomie = 45,
                Beschrijving = "Miss Grace: de naam zegt het al. Een elegante fiets in " +
                        "Een frame van dikke buizen, een brede voordrager en een stevige achterdrager. " +
                        "De ontwerpers van Gazelle interpreteerden de succesvolle transportfiets opnieuw. " +
                        "Met een lichtgewicht aluminium frame in eigentijds design. En integreerden er een krachtige elektromotor in. " +
                        "De HeavyDuty heeft de looks van een robuuste transportfiets – maar rijdt als een lichte stadsfiets.",
                Prijs = 2299.00)
        fietsDao.insertFietsItem(fietsItem7)



    }
}
}

const val DB_NAME = "FietsVerkoop.db"

我的 dao 文件:

@Dao
interface FietsDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertFietsItem(data: FietsItem)

    /*@Query("SELECT * FROM fietsen")
    fun getAllRecords(): MutableLiveData<List<FietsItem>>*/
    @Query("SELECT * FROM fietsen")
    fun getAllRecords(): LiveData<List<FietsItem>>

    @Delete
    fun deleteFietsItem(fiets: FietsItem)

    @Update
    fun updateFietsItem(fiets: FietsItem)

    @Query("DELETE FROM fietsen")
    fun deleteAll()
}

@Dao
interface MerkDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertMerk(data: Merk)

    /*@Query("SELECT * FROM ${Merk.TABLE_NAME}")
    fun getAllRecords(): MutableLiveData<List<Merk>>*/
    @Query("SELECT * FROM merken")
    fun getAllRecords(): LiveData<List<Merk>>

    @Delete
    fun deleteMerk(merk: Merk)

    @Update
    fun updateMerk(merk: Merk)

    @Query("DELETE FROM merken")
    fun deleteAll()
}

我的实体类

@Entity(tableName = FietsItem.TABLE_NAME)
data class FietsItem(

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "fietsid")
    var FietsID:Int?=null,
    @ColumnInfo(name = "merk")
    var Merk: Int?=null,
    @ColumnInfo(name="type")
    val Type: String?=null,
    @ColumnInfo(name="prijs")
    val Prijs: Double?=null,
    @ColumnInfo(name="beschrijving")
    val Beschrijving: String?=null,
    @ColumnInfo(name="autonomie")
    val Autonomie: Int ?= null
){
    companion object{
        const val TABLE_NAME="fietsen"
        const val FIETSID="fietsid"
        //const val MERK = "merk"
        const val TYPE = "type"
        const val PRIJS = "prijs"
        const val BESCHRIJVING = "beschijving"
        const val AUTONOMIE = "autonomie"
    }
}

@Entity(tableName = Merk.TABLE_NAME)
data class Merk (

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "merkid")
    var MerkID:Int?=null,
    @ColumnInfo(name = "merknaam")
    var MerkNaam: String?=null

    ){
        companion object{
            const val TABLE_NAME="merken"
            const val MERKID="merkid"
            const val MERKNAAM="merknaam"

        }
    }

任何输入将不胜感激,并随时询问更多信息和课程。

TL;DR 东西坏了,不知道为什么

标签: androidkotlinandroid-room

解决方案


推荐阅读