You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:57:53