Привязка данных с монетой и комнатой

У меня следующая проблема: я использую Koin для DI и Room для настойчивости. Теперь мои зависимости от комнаты следующие:

// Architecture Component - Room
implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"

Но я получаю описанную здесь ошибку: Постоянная комната Android: AppDatabase_Impl не существует

Поэтому я изменил обработчик аннотаций на kapt. Но теперь я получаю несколько ошибок в автоматически сгенерированных классах привязки данных, которых не было в annotationProcessor. Например:

app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/databinding/FragmentBinding.java:26: error: cannot find symbol
  protected FragmentBinding(DataBindingComponent _bindingComponent, View _root,
                                     ^
  symbol:   class DataBindingComponent
  location: class FragmentBinding

Определение модуля Koin:

val persistenceModule = module {
    single {
        Room.databaseBuilder(androidApplication(), Database::class.java, "database.db")
            .build()
    }
    single { get<Database>().dao() }
}

Как такое могло случиться?


person FabASP    schedule 24.03.2019    source источник
comment
Я думаю, это показывает ошибку привязки данных   -  person Shweta Chauhan    schedule 27.03.2019
comment
Я не думаю, что ошибка имеет какое-то отношение к комнате или койну. Ваш коин-модуль выглядит нормально. Ошибка указывает на ошибку привязки данных в файле макета.   -  person Javier Mendonça    schedule 21.05.2019


Ответы (3)


Убедитесь, что вы добавили плагин kapt в build.gradle файл уровня приложения:

apply plugin: 'kotlin-kapt'
person Birju Vachhani    schedule 15.07.2019

попробуйте single<YourDB>:

val dbModule = module {
    single<FairytaleDB> { Room.databaseBuilder(get(), FairytaleDB::class.java, "Fairytale.db").createFromAsset("ertak.db").build() }
    single { get<FairytaleDB>().getDao() }
}
person Mahmudxon    schedule 31.08.2020

Вот как мы можем обеспечить зависимость Room через Koin. Ниже приведен код????????

  fun providesDatabase(application: Application):UserDatabase =
        Room.databaseBuilder(application,UserDatabase::class.java,"userdatabase")
            .build()

fun providesDao(db:UserDatabase):UserDao = db.userDao()


val roomModule = module {

    single { providesDatabase(get()) }
    single { providesDao(get()) }
}
person Jayantkumar    schedule 12.06.2021