val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).build()
Is it compulsory to create instance of database class using the aboove code in mainactivity? in android ROOM?
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).build()
Is it compulsory to create instance of database class using the aboove code in mainactivity? in android ROOM?
You can have singleton database class and use it directly throughout application. No need to create its instance again and again .
Whenever you need DB Object just simply use it like below
db = AppDatabase.getInstance(activity.applicationContext)
Singleton Class
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.sqlite.db.SupportSQLiteDatabase
@Database(
entities = [Abc::class],
version = 1,
exportSchema = false
)
@TypeConverters(CustomTypeConvertes::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun abcDao(): AbcDao
companion object {
private var INSTANCE: AppDatabase? = null
private val lock = Any()
fun getInstance(context: Context): AppDatabase {
synchronized(lock) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java, "database-name"
).addCallback(object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
Console.debug("database-name", "Database created")
super.onCreate(db)
}
override fun onOpen(db: SupportSQLiteDatabase) {
Console.debug("database-name", "Database opened")
super.onOpen(db)
}
})
.fallbackToDestructiveMigration()
.build()
}
return INSTANCE!!
}
}
}
}