Итак, я пытаюсь использовать Room в личном проекте. Я реализовал свои объекты, dao и расширенный класс приложения roomdatabase:
@Database(
version = 1,
entities = [
UserDBEntity::class
]
)
abstract class MyDatabase: RoomDatabase() {
companion object {
const val DATABASE_NAME = "MyDb"
}
abstract fun getUserDao(): UserDao
}
Однако я также пытаюсь использовать с ним Hilt DI, поэтому я создал такой модуль:
@InstallIn(ApplicationComponent::class)
@Module
object PersistenceModule {
lateinit var database: MyDatabase
@Provides
@Singleton
fun provideDatabase(@ApplicationContext context: Context): MyDatabase{
database = Room.databaseBuilder(
context,
MyDatabase::class.java,
MyDatabase.DATABASE_NAME
)
.fallbackToDestructiveMigration()
.build()
return database
}
@Provides
@Singleton
fun provideUserDao(db: MyDatabase): UserDao {
return db.getUserDao()
}
}
Мне все кажется хорошо. Однако, когда я пытаюсь скомпилировать, у меня появляется следующее сообщение об ошибке:
файл класса для androidx.room.RoomDatabase не найден
Есть идеи, что я пропустил?
Если это может вам помочь, я попытался изменить свой build.gradle следующим образом:
реализация androidx.room:room-runtime:2.3.0-alpha02
К этому :
api androidx.room:room-runtime:2.3.0-alpha02
И при этом он успешно компилируется, но я не думаю, что это хорошая практика, просматривая учебные пособия, которые я нашел.
Не сомневайтесь, если вам понадобится дополнительная информация о моем коде.
Спасибо за ответ :)
РЕДАКТИРОВАТЬ:
Мой build.gradle для комнаты:
implementation "androidx.room:room-runtime:2.3.0-alpha02"
kapt "androidx.room:room-compiler:2.3.0-alpha02"
implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"
При этом также:
apply plugin: 'kotlin-kapt'
ИЗМЕНИТЬ 2:
Думаю, я нашел причину проблемы. Я вызвал свой метод DAO в таком классе:
@Singleton
class DBManagerImpl @Inject constructor(
private val userDao: UserDao
) : DBManager {
override fun insertUser(userDBEntity: UserDBEntity) {
userDao.insertUser(userDBEntity)
}
}
Кажется, проблема в причине инъекции userDao, если я прокомментирую частную строку val userDao: UserDao, у меня больше нет ошибки. Поэтому я думаю, что моя проблема связана с тем, что я ввожу объект dao.