未解决的参考:viewModelScope - Kotlin Android

Posted

技术标签:

【中文标题】未解决的参考:viewModelScope - Kotlin Android【英文标题】:Unresolved reference: viewModelScope - Kotlin Android 【发布时间】:2019-10-11 19:59:02 【问题描述】:

我尝试将 viewModelScope 添加到基本视图模型,但 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

【问题讨论】:

我使用 androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0-beta01 让它工作。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

在我的情况下,我忘记在该类中扩展 ViewModel,您用于 viewModelScope 的类必须类似于 kotlin 中的 yourModelClass : ViewModel() 和 java 中的 yourModelClass extends ViewModel

希望对你有所帮助

【讨论】:

【参考方案3】:

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

【讨论】:

有人能解释一下为什么“androidx.navigation:navigation-fragment-ktx”与viewModelScope有关吗??【参考方案4】:

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

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

【讨论】:

【参考方案5】:

有关工件的最新版本,请参阅 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'

【讨论】:

【参考方案6】:

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"

【讨论】:

【参考方案7】:

看起来您使用了两个不同版本的 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"
...

【讨论】:

以上是关于未解决的参考:viewModelScope - Kotlin Android的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Coroutines viewModelScope 中的改造调用

协程ViewModelScope源码解析

关于协程,详解ViewModelScope

Kotlin之协程coroutine lifecycleScope 和 viewModelScope源码

Kotlin 协程协程底层实现 ④ ( 结构化并发 | viewModelScope 作用域示例 )

Kotlin 协程协程底层实现 ④ ( 结构化并发 | viewModelScope 作用域示例 )