Инициализация класса базы данных комнаты - PullRequest
0 голосов
/ 11 октября 2019
val db = Room.databaseBuilder(
        applicationContext,
        AppDatabase::class.java, "database-name"
    ).build()

Обязательно ли создавать экземпляр класса базы данных, используя код aboove в mainacctivity? в Android ROOM?

1 Ответ

0 голосов
/ 11 октября 2019

Вы можете иметь класс одноэлементной базы данных и использовать его непосредственно в приложении. Нет необходимости создавать его экземпляр снова и снова.

Всякий раз, когда вам нужен объект БД, просто используйте его, как показано ниже

  db = AppDatabase.getInstance(activity.applicationContext)

Класс Singleton

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!!
            }
        }
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...