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 里面
我有一个功能可以像这样将一些数据上传到 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 里面