【问题标题】:How to add image list in Firebase?如何在 Firebase 中添加图像列表?
【发布时间】:2020-06-23 06:54:54
【问题描述】:

我想在 firebase 中上传图片列表,但在 firebase 上传成功监听器中没有在 OnSuccessListener 上添加图片列表。

试过了 我在它工作的 add onSuccessListener 类之外添加了字符串值,并且我尝试记录它也工作的 url。但它没有在 OnSuccessListener 的 arrayList 中添加字符串值。 谢谢你的帮助。

主要代码

 public void UploadImage() {
    if (isUserSelected != null) {
        progressDialog.setTitle("Image is Uploading...");
        Log.d(TAG, "UploadImage: uploading");
        progressDialog.show();
        Log.d(TAG, "UploadImage:  after progress bar");
        for (int i = 0; i < multipleFileUploads.size(); i++) {
            Log.d(TAG, "UploadImage: " + i);
            final StorageReference storageReference2 = storageReference.child(System.currentTimeMillis() + "." + GetFileExtension(multipleFileUploads.get(i)));
            storageReference2.putFile(multipleFileUploads.get(i))
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Log.d(TAG, "onSuccess: ");
                            progressDialog.dismiss();
                            Toast.makeText(getApplicationContext(), "Image Uploaded Successfully ", Toast.LENGTH_LONG).show();
                            storageReference2.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    Log.d(TAG, "onSuccess: uri " + uri.toString());
                                    imagelist.add(uri.toString());

                                }
                            });
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d(TAG, "onFailure: " + e.getMessage());
                }
            }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                    Log.d(TAG, "onProgress: " + taskSnapshot.getBytesTransferred());
                    Log.d(TAG, "onProgress: " + taskSnapshot.getTotalByteCount());
                }
            }).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                    Log.d(TAG, "onComplete: " + task.getException());
                }
            });
        }
        imageList.add("custom list");
        uploadinfo imageUploadInfo = new uploadinfo(txtdata.getText().toString(), txtData1.getText().toString(), imageList.toString());
        String ImageUploadId = databaseReference.push().getKey();
        databaseReference.child(ImageUploadId).setValue(imageUploadInfo);


    } else {
        Toast.makeText(uploadimg1.this, "Please Select Image or Add Image Name", Toast.LENGTH_LONG).show();

    }

Firebase 的 POJO 代码

public class uploadinfo {
public String imageName;
public String imageName1;
public String imageListString;

public uploadinfo(String imageName, String imageName1, String imageListString) {
    this.imageName = imageName;
    this.imageName1 = imageName1;
    this.imageListString = imageListString;
}

public String getImageName() {
    return imageName;
}

public void setImageName(String imageName) {
    this.imageName = imageName;
}

public String getImageName1() {
    return imageName1;
}

public void setImageName1(String imageName1) {
    this.imageName1 = imageName1;
}

public String getImageListString() {
    return imageListString;
}

public void setImageListString(String imageListString) {
    this.imageListString = imageListString;
    }
}

在 Firebase 中

【问题讨论】:

  • logcat 里有没有打印出来的东西?
  • 在logcat中显示文件的uri,但它没有添加到arraylist中。
  • 您将 url 添加到(任何)arraylist 的哪一行?
  • @npk 我更新了我的代码,因为我一直在调试我的代码。谢谢。它在下面 getDownloadUrl().addOnSuccessListener();
  • 现在可以用了吗?

标签: java android firebase firebase-realtime-database firebase-storage


【解决方案1】:

问题可能出在您的模型中。在 firebase 中,顺序为 imageListString、imageName、imageName1。但是在构造函数中的模型中,你得到了 String imageName、String imageName1、String imageListString。同时,我不确定在将其发送到 Firebase 之前如何生成您创建的列表。

【讨论】:

    【解决方案2】:

    你可以试试这个方法

     UploadTask uploadTask = storageReference2.putFile(multipleFileUploads.get(i));   
    Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()) {
                    throw task.getException();
                }
    
                // Continue with the task to get the download URL
                return ref.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    imagelist.add(downloadUri.toString());
                } else {
                    // Handle failures
                    // ...
                }
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多