首页 > 解决方案 > 尝试将 Hilt 与 Roomdb 结合使用时,找不到 androidx.room.RoomDatabase 的类文件

问题描述

这是我收到的错误消息。我检查了网络,我有所有需要的依赖项,我正确设置了一切。问题是我已经在另一个工作正常的项目上进行了这个设置,但由于某种原因它在这里不起作用。我尝试使缓存无效,重新启动等,但没有任何结果。我对造成这种情况的原因感到非常困惑。

error: cannot access RoomDatabase
    return DatabaseModule_ProvideAppRepositoryFactory.provideAppRepository(databaseModule, appDatabase(), ApplicationContextModule_ProvideContextFactory.provideContext(applicationContextModule));
                                                                          ^
  class file for androidx.room.RoomDatabase not found
1 error

这是数据库模块

@Module
@InstallIn(SingletonComponent::class)
class DatabaseModule {
    @Provides
    @Singleton
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return Room.databaseBuilder(
            context,
            AppDatabase::class.java, "app-db"
        ).build()
    }

    @Provides
    fun provideAppRepository(
        db: AppDatabase,
        @ApplicationContext ctx : Context
    ): AppRepository {
        return AppRepository(db, ctx)
    }

这些是我与 Kotlin Kapt 一起的依赖项

Plugins{
    id(GradlePluginId.ANDROID_LIBRARY)
    id(GradlePluginId.KOTLIN_ANDROID)
    id(GradlePluginId.KOTLIN_KAPT)
    id(GradlePluginId.HILT_ANDROID)
}
...

  implementation(LibraryDependency.ROOM)
    implementation(LibraryDependency.ROOM_KTX)
    kapt(LibraryDependency.ROOM_COMPILER)

Which is this 2.2.6 version, but i've been using the "2.3.0-beta02" as well
    const val ROOM = "androidx.room:room-runtime:${LibraryVersion.ROOM}"
    const val ROOM_COMPILER = "androidx.room:room-compiler:${LibraryVersion.ROOM}"
    const val ROOM_KTX = "androidx.room:room-ktx:${LibraryVersion.ROOM}"
@Database(entities = [CBImageDataModel::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun imageDao(): ImageDao
}

@Entity(tableName = "images")
@TypeConverters(ImageTypeConverters::class)
data class CBImageDataModel(
    @PrimaryKey(autoGenerate = true) val id: Long? = null,
    @ColumnInfo(name = "server_id") val serverID: Int
)

class AppRepository @Inject constructor(private val db: AppDatabase, private val context: Context) { ... 

标签: androidandroid-gradle-pluginandroid-roomdagger-2dagger-hilt

解决方案


将上面列出的依赖项添加到我的应用程序的 Build gradle 中,而不仅仅是使用依赖项的模块...

build.gradle.kts(应用程序)

Plugins{
    id(GradlePluginId.ANDROID_LIBRARY)
    id(GradlePluginId.KOTLIN_ANDROID)
    id(GradlePluginId.KOTLIN_KAPT)
    id(GradlePluginId.HILT_ANDROID)
}
...

  implementation(LibraryDependency.ROOM)
    implementation(LibraryDependency.ROOM_KTX)
    kapt(LibraryDependency.ROOM_COMPILER)

Which is this 2.2.6 version
    const val ROOM = "androidx.room:room-runtime:${LibraryVersion.ROOM}"
    const val ROOM_COMPILER = "androidx.room:room-compiler:${LibraryVersion.ROOM}"
    const val ROOM_KTX = "androidx.room:room-ktx:${LibraryVersion.ROOM}"
    ```

推荐阅读