这是我第一个使用koin的mvvm项目,正在使用Room数据库。我正在用viemwodel进行网络调用,并且从api提取数据后,我想将其存储在数据库中。下面是我的类,其中包含所有数据库方法,例如insert和delete。
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()
}
}
}
我当时是通过这样的活动来称呼这个班的
userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
现在我想在一个进行网络api调用的viewmodel类中调用它,但我不知道使用koin或其他任何方式访问它的最佳方法是什么。我需要使用不同的方法数据库访问,我必须在每种方法中像上面一样对其进行初始化。
class SubscriptionViewModel(): BaseViewModel() {
fun init(owner:ViewModelStoreOwner) {
userServiceViewModel = ViewModelProvider(owner).get(UserServiceViewModel::class.java)
}
}
答案 0 :(得分:3)
通常,最好不要访问ViewModel
中的db对象。我的意思是,应该在数据源类中使用dao,然后将数据源注入到ViewModel
中,甚至更好,在存储库中使用数据源,然后在ViewModel
中注入存储库
此后,您不能再访问另一个ViewModel
中的一个。他们应该是独立的。如果要对多个ViewModel
中的数据库或API进行操作,请通过一个公共存储库类访问它们。