在 kotlin 协程中以同步方式调用异步方法 android

Calling asyn method in synchronous way in kotin coroutine android

我正在尝试 运行 一个 google ML Kit 函数,结果将在回调中,需要将该值作为 return 类型传递给它所在的方法在科特林执行。我尝试了一些 kotlin 协同程序的样本,但我仍然遗漏了一些东西并且它失败了。我还在学习 kotlin 和新手。

internal fun processImageSync(image: InputImage) : String{
        var doctype = ""
        val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
        recognizer.process(image)
            .addOnSuccessListener { visionText ->
                var texttoscan = visionText.text.trim()
                doctype = findstr(texttoscan)    
            }
            .addOnFailureListener { 
            }
    return doctype;
    }

谁能帮我解决这个问题?

此致!

使用kotlinx-coroutines-play-services module

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.0")
}

使用扩展名Task.await

internal suspend fun processImageSync(image: InputImage): String {
    val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
        
    return recognizer.process(image)
        .await()
        .let { visionText -> findstr(visionText.text.trim()) }
}