Kotlin 1.0.2房间数据库

时间:2019-03-11 20:50:39

标签: android kotlin koin

我正在使用koin 1.0.2来管理依赖项注入,但是它不能与会议室数据库一起使用,返回时无法为单个对象创建定义...这是我的代码:

@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)
}

2 个答案:

答案 0 :(得分:0)

我已经在带有示例实体的测试项目中尝试了您的代码,并且该代码有效。由于您尚未发布实际的错误说明,因此请执行/确保以下步骤,然后重试。

将以下依赖项添加到build.gradle

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

如果您正在使用RxJava作为空间,则还要添加以下行

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

应用kotlin-kapt插件

apply plugin: 'kotlin-kapt'

清理并构建。

如果仍然遇到问题,请考虑使用logcat堆栈跟踪来编辑问题。

答案 1 :(得分:0)

您是否在其他模块中声明了Context对象的定义?因为您的数据库方法需要这一方法,所以您正在调用get()来解决它。如果没有,只需更改

single { UserDatabase.getInstance(get()) }

single { UserDatabase.getInstance(androidContext()) }