Используйте что-то вроде этого, чтобы убедиться, что оно не равно нулю
object DatabaseSource {
private lateinit var INSTANCE: AppDatabase
fun getInstance(context: Context): AppDatabase {
if (!::INSTANCE.isInitialized) {
synchronized(AppDatabase::class) {
if (!::INSTANCE.isInitialized) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
AppDatabase::class.java,
"app_database").build()
}
}
}
return INSTANCE
}
}
Позвоните с помощью:
val db = DatabaseSource.getInstance(context)
И это никогда не будет null
, поэтому у вас больше нет этой проблемы.
Я добавил двойную блокировку, чтобы повысить безопасность потоков при вызове getInstance()
.
Но на самом деле вы должны использовать внедрение зависимостей с синглетами, чтобы избежать этого, передаваемого в зависимости от контекста и этого ручного создания / блокировки. Вы должны будете иметь контекст, доступный везде, что является плохим паттерном.
Это также действует как ответ на ваш другой пост , который, по-видимому, является дубликатом этого.