【发布时间】:2020-06-26 15:58:33
【问题描述】:
我在 android 中使用 Kotlin 从 firebase 数据库中获取数据。 但是该函数在内部侦听器返回值之前返回值,因此我得到空值或空值。 我的代码是
fun getImages(image: String): String {
var imageUrl= ""
val databaseReference = database.getReference(image)
databaseReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
imageUrl = dataSnapshot.value as String
println(imageUrl)
println("reached here 1")
}
override fun onCancelled(error: DatabaseError) {
Log.w(TAG, "Failed to read value.", error.toException())
}
})
println("reached here 2")
return imageUrl
}
上面的函数在打印“reached here 1”之前打印“reached here 2”,因为 imageUrl 的值返回为空。
【问题讨论】:
-
当你调用一个异步函数(一个带有回调参数的函数)时,你想要在它完成后运行的代码必须进入你的回调代码中。除非您切换到使用协程,否则您无法从此函数返回结果。