downloadUrl 给出空结果

downloadUrl give empty result

我有一个功能可以像这样将一些数据上传到 firebase

private fun addDatatoFirebase(){
    val addImage = StorageRef.child(preferences.getValue("username").toString()).child("food_pics/"+UUID.randomUUID())
    addImage.putFile(FilePath).addOnSuccessListener {
        addImage.downloadUrl.addOnSuccessListener {
            PicUrl = it.toString()
        }
    }


    val dataRef = ref.child(preferences.getValue("username").toString()).child("FoodList/"+UUID.randomUUID().toString())
        dataRef.addValueEventListener(object : ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                id = snapshot.ref
                Log.w("PicUrl data",PicUrl)
                dataRef.child("image_pic").setValue(PicUrl)
                dataRef.child("name").setValue(food_name)
                dataRef.child("avail").setValue(availability)
                dataRef.child("price").setValue(food_price.toInt())
            }

            override fun onCancelled(error: DatabaseError) {
                Toast.makeText(applicationContext,"Error",Toast.LENGTH_SHORT)                }

        })
}

问题是 PicUrl 是空的,尽管我已经在这里给它赋值了:

addImage.downloadUrl.addOnSuccessListener {
                PicUrl = it.toString()
            }

日志显示 PicUrl 值为“”,因为我用 PicUrl =“”初始化了 var 这是日志:

W/PicUrl data: 
W/PicUrl data: 

所以现在,我想知道我在那个函数中的代码有什么问题导致了这样的错误

我找到了答案

addImage.downloadUrl.addOnSuccessListener {
                PicUrl = it.toString()
                dataRef.child("image_pic").setValue(PicUrl)
            }

因为 downloadUrl 是异步的。我需要在回调中包含需要它的值的代码,这意味着放置 :

dataRef.child("image_pic").setValue(PicUrl)

在 addOnSuccessListener 里面