未解决的参考:viewModelScope - Kotlin Android

问题描述 投票:0回答:13

我尝试将 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

android kotlin android-gradle-plugin kotlin-android-extensions kotlin-coroutines
13个回答
102
投票

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

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

22
投票

就我而言,我忘记在该类中扩展 ViewModel,您用于 viewModelScope 的类必须类似于 kotlin 中的

yourModelClass : ViewModel()
和 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并没有真正相关。我花了一段时间才弄清楚这一点。希望有帮助!


5
投票

还要检查您所在的文件是否正确。我有一段时间遇到了同样的问题,然后我来到了这个页面,但后来我意识到我不小心尝试在我的

Fragment
上运行viewModelScope.launch

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


3
投票

有关该工件的最新版本,请参阅 Maven 存储库 Android 生命周期 ViewModel 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'


3
投票

也许您没有使用 ViewModel 类扩展 ActivityViewModel

class SampleActivityViewModel: ViewModel() {

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

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"

2
投票

build.gradle(:app)

中删除以下配置
configurations {
    all {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    }
}

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"
...

0
投票

ViewModelScope仅在2.2.0版本中添加,在更高版本上也不可用。我尝试使用 2.6.0 但遇到同样的错误。


0
投票

您的

ViewModel
必须延伸
androidx.lifecycle.ViewModel
。如果没有,Android studio 无法识别
viewModelScope

class RegisterViewModel() : ViewModel()  {
    fun postRegister(registerBody: RegisterBody) = viewModelScope.lunch{

    }
}

0
投票

添加

lifecycle-viewmodel-ktx
实施对我来说不起作用。

    implementation("androidx.activity:activity-ktx:1.8.0")
//    implementation("androidx.lifecycle:lifecycle-view-model-ktx:2.6.2")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")

按照上述方式实现

activity-ktx
lifecycle-runtime-ktx
是有效的

© www.soinside.com 2019 - 2024. All rights reserved.