在Android Java中运行其他功能之前,将图像上传到Firestore存储的等待功能如何完成?

时间:2020-06-28 18:24:11

标签: java android firebase asynchronous firebase-storage

我想让应用程序将许多图像上传到Firestore存储中,并获取这些图像的所有URL,然后通过在Android中使用Java将其发布到Firestore数据库中。

我具有将此功能发布到数据库上

  public void uploadFile(Map<String,Object> item , String phone){
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    db.collection("Users").document().collection(phone).add(item)
            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                @Override
                public void onSuccess(DocumentReference documentReference) {
                    Toast.makeText(getApplicationContext(),"Upload Complete",Toast.LENGTH_LONG).show();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });

}

数据是我将发布到数据库的数据的哈希图。此数据包含以下信息:

 Map<String,Object> data = new HashMap<>();
                      data.put("name" , name);
                      data.put("phone" , phone);
                      data.put("city" , city);
                      data.put("itemName" , itemName);
                      data.put("price" , price);
                      data.put("type" , type);
                      data.put("subtype" , subtype);
                      data.put("cond" , cond);
                      data.put("details" , details);

并且我具有上传照片的功能

public void upLoadImage(File data,Map<String,Object> list,int KEY){

   Uri file = Uri.fromFile(data);

   FirebaseStorage storage = FirebaseStorage.getInstance();
   StorageReference storageRef = storage.getReference().child("images/"+file.getLastPathSegment());
   UploadTask uploadTask = storageRef.putFile(file);
   
   uploadTask.addOnFailureListener(new OnFailureListener() {
       @Override
       public void onFailure(@NonNull Exception e) {
           url = "fails " + e.getMessage();

       }
   });
   uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
       @Override
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

          storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
              @Override
              public void onSuccess(Uri uri) {

                      if(KEY == 1){
                          list.put("image1",String.valueOf(uri));
                      }else if(KEY ==2){
                          list.put("image2",String.valueOf(uri));
                      }else if(KEY == 3){
                          list.put("image3",String.valueOf(uri));
                      }
              }
          });

       }
   });

此函数接受两个参数数据:

  1. 将在其中推送下载网址的列表
  2. 图像文件

我想像这样运行它

uploadImage(path1,data,1);
uploadImage(path2,data,2);
uploadImage(path3,data,3);
uploadfile()

这意味着我要上传图像并完成,然后上传秒图像并完成等,然后运行uploadfile,因为我的问题是uploadfile不等待上传图像完成。

1 个答案:

答案 0 :(得分:0)

通过写这样的上传图片解决了问题

public void upLoadImage(String path,String path2, String path3,Map<String,Object> list,int KEY,String Auth){

  if(!path.equals("empty") && path != null){

      Toast.makeText(getApplicationContext(),"path = " + path,Toast.LENGTH_LONG).show();
      Uri file = Uri.fromFile(new File(path));
      FirebaseStorage storage = FirebaseStorage.getInstance();
      StorageReference storageRef = storage.getReference().child("images/"+file.getLastPathSegment());
      UploadTask uploadTask = storageRef.putFile(file);
      uploadTask.addOnFailureListener(new OnFailureListener() {
          @Override
          public void onFailure(@NonNull Exception e) {
              Toast.makeText(getApplicationContext(),"No Connection",Toast.LENGTH_LONG).show();
          }
      });
      uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
          @Override
          public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

              storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                  @Override
                  public void onSuccess(Uri uri) {
                        if(KEY == 1 ){
                            list.put("image1",String.valueOf(uri));
                            upLoadImage(path2,"null",path3,list,2,Auth);

                        }
                        if(KEY == 2){
                            list.put("image2",String.valueOf(uri));
                            upLoadImage(path3,"null","null",list,3,Auth);
                        }
                        if(KEY == 3){
                            list.put("image3",String.valueOf(uri));
                            uploadFile(list,Auth);
                        }

                  }
              });

          }
      });
  }else {
      uploadFile(list,Auth);
  }
  
}
相关问题