gpt4 book ai didi

android - 如何使用 koin 在 vi​​ewmodel 中注入(inject) Room

转载 作者:行者123 更新时间:2023-12-02 12:44:47 26 4
gpt4 key购买 nike

这是我与 koin 的第一个 mvvm 项目,我正在使用 Room 数据库。我在 viemwodel 中进行网络调用,从 api 获取数据后,我想将其存储在数据库中。下面是我的类,它具有所有数据库方法,如插入和删除。

class UserViewModel(application: Application) : AndroidViewModel(application) {

private val userSDAO: UserDAO
private val userDB: AppSettingsDatabase

init {
userDB = AppSettingsDatabase.getAppSettingsDatabase(application.applicationContext)!!
userDAO = userDB.userDao()
}

fun getAppSetting():LiveData<AppSettingsEntity>{
return userDB.appSettingDao().getAllAppSettings()
}

fun deleteUser() {
userDB.databaseWriteExecutor.execute { ->
userDAO.deleteUser()
}
}
}

我是从这样的 Activity 中调用这个类的

userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)

现在我想在我进行网络 api 调用的 View 模型类中调用它,但我不知道使用 koin 或任何其他方式访问它的最佳方法是什么。我在需要的地方有不同的方法数据库访问,我必须像上面那样在每个方法中初始化它。

class SubscriptionViewModel(): BaseViewModel() {

fun init(owner:ViewModelStoreOwner) {
userServiceViewModel = ViewModelProvider(owner).get(UserServiceViewModel::class.java)
}
}

最佳答案

一般来说,不访问 ViewModel 中的 db 对象是更好的模式。我的意思是应该在数据源类中使用 dao,然后将数据源注入(inject) ViewModel 或者更好,在存储库中使用数据源,然后将存储库注入(inject) > View 模型

之后,您不得访问另一个 View 模型中的 ViewModel。他们应该是独立的。如果您想在多个 ViewModel 中对 db 或 api 执行某些操作,请通过公共(public)存储库类访问它们。

请看:https://developer.android.com/jetpack/guide#overview

关于android - 如何使用 koin 在 vi​​ewmodel 中注入(inject) Room,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63126836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com