Prabhakaran
Prabhakaran

Reputation: 1337

Calling asyn method in synchronous way in Kotlin coroutine

I am trying to run a Google ML Kit function and the result will be in callback and need to pass that value as a return type for the method in which it was executing in Kotlin. I tried some of the samples of Kotlin coroutines but still I am missing something and it was failing. I am still learning 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;
    }

How can I solve the issue?

Upvotes: 1

Views: 1120

Answers (1)

Use kotlinx-coroutines-play-services module

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

Use extension 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()) }
}

Upvotes: 2

Related Questions