首页 > 解决方案 > 异步任务跟不上 for 循环(firebase)

问题描述

  for (Uri mUri : mSelected) 
   {
       imagesRef = storageRef.child(postid + mUri.getLastPathSegment());
       imagesRef.putFile(mUri).addOnSuccessListener(task4 ->
       db.collection("posts").document(postid).update("photo_id", FieldValue.arrayUnion(imagesRef.getDownloadUrl())));
   }

所以,现在我正在使用 firestore 和 firebase 存储。我将(多个)图像上传到存储中,当它上传时,我得到了下载 url 并想将它添加到我的 firestore 中。所以,问题是,只有最后一个图像被添加到 firestore,所有图像都被添加到存储中,但只有最后一个 imgUrl 被添加到 firestore。由于 firebase 使用异步任务,我怀疑这是因为更新任务跟不上循环。很感谢任何形式的帮助 !!!

标签: androidfirebaseloopsasynchronousandroid-asynctask

解决方案


我认为问题可能出在imagesRef 上,它是在外部声明的,因此它在响应for (Uri mUri : mSelected) {...}之前被替换。addOnSuccessListener(...)

所以,在本地声明它for (Uri mUri : mSelected) {...},看看它是否不能解决问题。像这样

for (Uri mUri : mSelected) 
{
       var imagesRef = storageRef.child(postid + mUri.getLastPathSegment());
       imagesRef.putFile(mUri).addOnSuccessListener(task4 ->
       db.collection("posts").document(postid).update("photo_id", FieldValue.arrayUnion(imagesRef.getDownloadUrl())));
 }

推荐阅读