Android 如何延迟返回回调直到异步任务完成?

Android 如何延迟返回回调直到异步任务完成?,android,firebase,google-cloud-firestore,async-await,kotlin-coroutines,Android,Firebase,Google Cloud Firestore,Async Await,Kotlin Coroutines,在函数中,我希望在onSuccessListener完成执行后调用返回数据 private fun getFirebaseDataReturnsResult( fieldName: String, documentName: String, userUID: String) : String { var data : String? = null val docRef = db.collection(documen

在函数中,我希望在onSuccessListener完成执行后调用返回数据

private fun getFirebaseDataReturnsResult(
        fieldName: String,
        documentName: String,
        userUID: String) : String {

        var data : String? = null
        val docRef = db.collection(documentName).document(userUID)

        docRef.get(source)
            .addOnSuccessListener { document ->
                if (document != null) {
                    data = document.getString(fieldName).toString()
                }
            }
            .addOnFailureListener {
                docRef.get().addOnSuccessListener { document ->
                        data = document?.getString(fieldName).toString()
                }.addOnFailureListener { exception ->
                    data = exception.message.toString()
                }
            }
        return data!!
    }
db
是云Firestore的一个实例。 正在IO协同路由范围内的
onViewCreated()
上调用getFirebaseDataReturnsResult()方法


我尝试在返回数据之前添加
delay()
,但我认为这似乎是一种不好的做法。

docRef.get()
是异步的,会立即返回任务对象。如果你想在一个协同程序中使用这个对象,你应该强烈考虑制作<代码> GeFixBaseDATAtRelsStices结果 A<代码>暂停Fase并将该任务对象转换成你可以等待使用的东西。这还可以省去将侦听器附加到任务的麻烦,您只需使用try/catch即可。

是的,这确实有效。我发现这篇文章可以帮助其他人解决同样的问题。