未解决的引用:viewModelScope - Kotlin Android

55

我尝试将viewModelScope添加到基本的viewModel中,但是Android Studio无法识别它。

我尝试使用某些解决方案更改我的gradle构建文件,但没有任何作用。

这是我的build.gradle应用程序文件的一个摘录

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01"
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-alpha01"

当我在我的viewModel中输入viewModelScope时,它显示未解析的引用:viewModelScope


5
我使用 androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0-beta01 让它工作了。 - CommonsWare
13个回答

103

目前它还处于alpha版本,所以请更新Gradle以使用以下依赖项:

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"

22

在我的情况下,我忘记在那个类中扩展ViewModel,你用于viewModelScope的类必须像这样 yourModelClass : ViewModel() (对于Kotlin),对于Java来说则是 yourModelClass extends ViewModel

希望这有所帮助。


8

我曾经遇到过相同的问题,后来只是导入了以下内容:"androidx.navigation:navigation-fragment-ktx:2.2.0-rc03" "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-rc03"尽管当时我认为fragment-ktx与此无关。花了一些时间才弄明白。希望能对你有所帮助!


3
有人能解释一下为什么 "androidx.navigation:navigation-fragment-ktx" 与 viewModelScope 有关吗? - Erfan Eghterafi

5

同时要检查你是否在正确的文件中。我曾经也遇到过同样的问题,来到了这个页面,但后来我发现我不小心在我的Fragment上尝试运行了viewModelScope.launch

viewModelScope.launch 仅在您的 ViewModel 中可用,而 lifecycleScope.launch 则在您的有生命周期意识的组件中可用。


3
也许您没有将activityViewModel扩展为ViewModel类。
class SampleActivityViewModel: ViewModel() {

 fun getData(){
     viewModelScope.launch{
       // Make an API call
     }
   }
}

3

如果需要最新版本的构件,请参考Maven Repository Android Lifecycle ViewModel Kotlin Extensions

在应用程序级别的build.gradle文件中添加以下内容:

def lifecycle_version = "2.2.0-rc03"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

不要忘记在app/build.gradle文件的顶部添加apply plugin: 'kotlin-kapt'


2

请从 build.gradle(:app) 中删除以下配置

configurations {
    all {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    }
}

2

viewModelScope是在版本2.1.0中引入的,详情请见这里

请检查是否已安装lifecycle-viewmodel-ktx-2.2.0-alpha01.aar。对于我而言,使用您编写的设置不会出现任何错误消息。然而,在使用较早版本时会出现错误消息:

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0"

但是这个可以正常工作:
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"

1

Build.gradle (应用级别)

将您的代码从以下内容更改:

def lifecycle_version = "2.0.0" 或者如果您使用的版本低于此版本,则更改为:

def lifecycle_version = "2.2.0"

viewModelScope 是在生命周期模块的 2.2.0 版本中推出的,因此在此之前您找不到它。


0

看起来你正在使用两个不同版本的AndroidX生命周期库。

请将你的app/build.gradle修改为:

...
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha01"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0-alpha01"
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-alpha01"
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接