kotlin中如何等待函数完成?

问题描述 投票:0回答:1

我有功能下载网址,我希望主程序等待,直到我有合适的网址,然后我可以将其放入对象中

    fun uploadImage(userName: String, uri: Uri): String
    {
        uploadImageProcess(userName , uri)
        return downloadUri
    }
     private fun uploadImageProcess(userName: String, uri: Uri){
        val ref = createReference(userName)
        Log.d("uploadImageFUNCTION", "Reference: $ref")
        val uploadTask = ref.putFile(uri)
        val urlTask = uploadTask.continueWithTask { task ->
            if (!task.isSuccessful) {
                task.exception?.let {
                    Log.d("uploadImageFUNCTION", "task upload .exception: $task.exception")
                    throw it
                }
            }
            ref.downloadUrl
        }.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d("uploadImageFUNCTION", "task downloadUrl : ${task.result}")
                downloadUri = task.result.toString()
            } else {
                Log.d("uploadImageFUNCTION", "task downloadUrl .exception: $task.exception")
            }
        }

    }

请帮助我

我正在尝试异步,但没有运气

android firebase kotlin
1个回答
0
投票

像这样使用协程

suspend fun uploadImageFile(): String {
    return withContext(Dispatchers.IO) {
        val deferredResult = async {               
            uploadImage()
        }
        deferredResult.await()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.