Android:如何访问Ion Library中的await()方法

时间:2018-05-20 00:20:17

标签: android kotlin ion

我正在使用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语句中。错误是:

Screen_Shot

这让我想到了第二个问题。如果使用.await()的唯一方法是手动下载AsyncAwait.kt,我该如何修复此错误以便文件编译?

1 个答案:

答案 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)
    }
  }