我正在使用ion,这是一个Android库。如ion-kotlin所示,可以使用名为await()
的方法,如下所示:
fun getFiles(files: Array<String>) = async {
for (file in files) {
Ion.with(context)
.load(file)
.asString()
.await()
}
}
我将这个确切的函数粘贴到我的MainActivity
类中作为测试。但是,我得到了错误&#34;未解决的参考:await&#34;在Android Studio中。
这令人困惑,因为我的应用程序的build.gradle
文件有以下两行:
implementation 'com.koushikdutta.ion:ion:2.+'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5'
这让我想到第一个问题,如何在离子库中使用.await()
方法?
我想也许我不得不手动下载AsyncAwait.kt,这是ion-kotlin源文件夹中的唯一文件。
所以,我下载了该文件并将其放在我的项目包中。我将下载文件顶部的包声明从package com.koushikdutta.ion.kotlin
更改为package com.example.vroy1.recylerviewtest
。
这似乎部分地解决了这个问题,因为我不再拥有&#34;未解决的引用:await&#34; Android Studio中的错误。
但是,AsyncAwait.kt文件拒绝编译。我收到了几个错误。
其中一个错误发生在文件顶部的import语句中。错误是:
这让我想到了第二个问题。如果使用.await()
的唯一方法是手动下载AsyncAwait.kt,我该如何修复此错误以便文件编译?
答案 0 :(得分:0)
我建议您定义一些像这样的实用功能
suspend fun <T> customAsync(block: suspend CoroutineScope.() -> T): Deferred<T> {
val deferred: Deferred<T> = async(CommonPool) { block() }
return deferred
}
suspend fun <T> asyncAwait(block: suspend CoroutineScope.() -> T): T = customAsync(block).await()
然后你可以用正常的方式定义getFiles()函数(不需要让它异步),如果你想在不同的线程中执行它,那么在 asyncAwait {} 中调用该函数像这样
launch(UI) {
val result = asyncAwait {
getFiles(listOfStrings)
}
}