База данных комнат Kotlin 1.0.2

#android #kotlin #koin

#Android #kotlin #коин

Вопрос:

Я использую koin 1.0.2 для управления внедрением зависимостей, но он не работает с базой данных комнат, он возвращает can’t create definition для single… Вот мой код:

 @Database(entities = [UserEntity::class], version = 1, exportSchema = false)
abstract class UserDatabase : RoomDatabase() {

    abstract fun userDao(): UserDao

    companion object {

        private var INSTANCE: UserDatabase? = null

        fun getInstance(context: Context): UserDatabase {
            if (INSTANCE == null) {

                INSTANCE = Room.databaseBuilder(
                        context,
                        UserDatabase::class.java,
                        "user_database")
                        .allowMainThreadQueries()
                        .build()
            }

            return INSTANCE!!
        }
    }
}


val DatabaseModule = module {

   single { UserDatabase.getInstance( get())}

}

class UserApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin(getModules())
    }
    private fun getModules() = listOf(DatabaseModule, RepositoryModule, ViewModule)
}
  

Ответ №1:

Я попробовал ваш код в тестовом проекте с примерами объектов, и это сработало. Поскольку вы не опубликовали фактическое описание ошибки, пожалуйста, выполните следующие шаги и повторите попытку.

Добавьте следующие зависимости к build.gradle

 implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
  

Если вы используете RxJava для room, добавьте также следующую строку

 implementation "androidx.room:room-rxjava2:$room_version"
  

Примените kotlin-kapt плагин

 apply plugin: 'kotlin-kapt'
  

очистка и сборка.

Если вы все еще сталкиваетесь с проблемой, рассмотрите возможность редактирования вопроса с помощью трассировки стека logcat.

Ответ №2:

Объявили ли вы определение для Context объекта в других модулях? Потому что ваш метод базы данных нуждается в этом, и вы вызываете get() для его решения. Если нет, просто измените

single { UserDatabase.getInstance(get()) }

Для

single { UserDatabase.getInstance(androidContext()) }