【发布时间】:2018-12-21 01:08:20
【问题描述】:
我正在尝试将多个文件上传到 Firebase,并希望在所有上传任务完成后将其链接到另一个孩子。为了实现这一点,我试图在 kotlin 中使用协程。以下是代码(如果我错了,请纠正我,因为我在协程方面真的很糟糕):
fun create(placemark: PlacemarkModel,callback: () -> Unit=fun(){})=runBlocking {
val key = db.child("users").child(userId).child("placemarks").push().key
placemark.id = key!!
placemarks.add(placemark)
db.child("users").child(userId).child("placemarks").child(key).setValue(placemark)
uploadImage(placemark.dp,"dp",placemark)
if (placemark.images.size>0){
placemark.images.forEach{
uploadImage(it,"images",placemark,placemark.images.indexOf(it))
}
}
这是我的 uploadImage 函数,我打算等到它完成运行并将 URI 传递回主函数
suspend fun uploadImage(image:String,
type:String,
placemark: PlacemarkModel,
index:Int=0,
callback:()->Unit=fun(){}):URI{
st = FirebaseStorage.getInstance().reference
info("Coroutines 2")
val imageRef = st?.child(userId + '/' + File(image).name)
val data=readAndCompress(image)
data?.let {
var uploadTask=imageRef?.putBytes(data)
uploadTask?.addOnFailureListener {
println(it.message)
}?.addOnSuccessListener { taskSnapshot ->
//I want to return the URI here however return is not allowed
}
}
}
感谢您的宝贵时间。
【问题讨论】:
-
我不熟悉 Kotlin,但是在 Java 中,当我需要根据上传到 Firebase 的图像数量运行某些东西时,我在 for 循环中放置了一个检查器以获取图像索引。例如。 for( int i=0; i
-
我认为这行不通。我需要将上传的文件链接到我的孩子,这种方法不会等到文件完全上传。因此我的孩子不会参考图片
-
我希望使用 addOnCompleteListener 上传会很明显。我只是回答问题的 te 数组索引部分。您可以让 addOnCompleteListener / addOnSuccessListener 在 Firebase 中上传任务,这样您就可以在上传完成/成功时实现您的逻辑
-
也许使用 forEach 会让这变得不那么明显。无论哪种方式,如果遇到任何障碍,请告诉我
标签: android firebase kotlin firebase-storage