When I try to check my database files in device file explorer there's nothing there. So that means that my room database is not being created, but I don't have a single error. I also add data to my database so it means something must go wrong but it's not giving any indication that something went wrong. Does anybody have a clue what is going wrong?
My database class:
@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"
My dao files:
@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()
}
my entity classes
@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"
}
}
Any input would be greatly appreciated and feel free to ask for more info and classes.
TL;DR stuff broke and don't have any idea why