未解决的参考:viewModelScope - Kotlin Android

Unresolved reference: viewModelScope - Kotlin Android

我尝试将 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 时,它​​显示 Unresolved reference: viewModelScope

目前处于 alpha 阶段,因此请更新您的 gradle 以使用以下依赖项:

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.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"
...

有关工件的最新版本,请参阅 Maven 存储库 Android 生命周期视图模型 Kotlin 扩展

在应用级别 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'

我遇到了同样的问题,我刚刚导入了: "androidx.navigation:navigation-fragment-ktx:2.2.0-rc03" "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-rc03" 尽管我认为 fragment-ktx 并没有真正相关。我花了一段时间才弄明白。希望对您有所帮助!

在我的例子中,我忘记扩展 ViewModel class,你用于 viewModelScope 的 class 必须像 kotlin 中的 yourModelClass : ViewModel() 和 java yourModelClass extends ViewModel

希望对您有所帮助

viewModelScope 随版本 2.1.0 引入,请参阅 here

检查是否安装了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"

同时检查您是否位于正确的文件中。我有一段时间遇到了同样的问题,我来到了这个页面,但后来,我意识到我不小心试图在我的 Fragment 上 运行 viewModelScope.launch

viewModelScope.launch 仅在您的 ViewModel 中可用,并且 lifecycleScope.launch 在您的生命周期感知组件中。

也许您没有使用 ViewModel class

扩展 activityViewModel
class SampleActivityViewModel: ViewModel() {

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