如何在ViewModel中添加删除全部数据的函数?解决未解析引用错误
问题解答:如何在UserViewModel中正确调用userRepository的deleteAll函数
嘿,我来帮你搞定这个问题~你遇到的「unresolved reference」错误其实很好解决,核心原因是你没有把构造函数传入的userRepository保存为ViewModel类的成员变量,所以在deleteAll函数里根本找不到这个对象。
具体修复步骤:
- 在ViewModel的构造函数里,给
userRepository参数加上val关键字,把它变成类的私有成员变量(默认就是private,也可以显式写出来) - 之后就能在
deleteAll函数里正常调用userRepository.deleteAll()了
修改后的完整代码:
@OpenForTesting class UserViewModel @Inject constructor( private val userRepository: UserRepository, repoRepository: RepoRepository ) : ViewModel() { private val _login = MutableLiveData<String>() val login: LiveData<String> get() = _login val repositories: LiveData<Resource<List<Repo>>> = Transformations .switchMap(_login) { login -> if (login == null) { AbsentLiveData.create() } else { repoRepository.loadRepos(login) } } val user: LiveData<Resource<User>> = Transformations .switchMap(_login) { login -> if (login == null) { AbsentLiveData.create() } else { userRepository.loadUser(login) } } fun setLogin(login: String?) { if (_login.value != login) { _login.value = login } } fun retry() { _login.value?.let { _login.value = it } } // 现在这个函数可以正常工作了 fun deleteAll() { userRepository.deleteAll() } }
简单说就是构造函数里的参数如果要在类的其他方法里使用,必须把它保存为成员变量,加上val或者var就行啦~
内容的提问来源于stack exchange,提问作者RyanKing
相关产品推荐
相关产品推荐

