如何获取 Android 中存储在 firebase 中的所有图像的 URL?

How to get URLs of all images stored in firebase in Android?

我正在执行此 Android 项目,我希望在该项目中检索存储在 Firebase 存储中的所有 URL 并将它们全部显示在图像视图中。给定代码的问题是它只获取一个下载 url.In 我怎样才能获取存储在 Firebase 中的所有图像的所有 URL。 简而言之:有一个 activity,我将其中的图像保存到 firebase,而另一个我想检索 Imageview.In 中的所有图像,我该怎么做? 谢谢

if(requestCode== GALLERY_INTENT && resultCode== RESULT_OK)
    {
          mProgress.setMessage("Uploading....");
          mProgress.show();
          Uri uri =data.getData();
        StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment());
        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                mProgress.dismiss();
                Uri downloadUri = taskSnapshot.getDownloadUrl();

                Picasso.with(MainActivity.this).load(downloadUri).fit().centerCrop().into(mImageView);
                Toast.makeText(MainActivity.this,"Upload done",Toast.LENGTH_LONG).show();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(MainActivity.this,"Upload  failed",Toast.LENGTH_LONG).show();
            }
        });
    }

我认为没有 API 来获取存储在 firebase 存储中的所有文件。 当我保存文件时,我曾经在实时数据库中存储文件元数据,包括文件名、下载url等。

所以当我不得不从存储中获取所有文件时,我会使用数据库。

编辑:

这是我的做法。

UploadTask uploadTask = storageRef.putBytes(data,storageMetadata);
    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {

        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
             //Save to database using
         //taskSnapshot.getMetadata().getCustomMetadata(StringKeys.SOME_KEY);
        }
    }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

        }
    });

Firebase 中,目前没有 API 调用可以为您提供 Firebase Storage 中所有文件的列表。相反,您可以做的是,将图像上传到 Firebase Storage 后,使用 getDownloadUrl(); 下载该图像 link 并将其保存到 实时数据库.


要从数据库读取或写入数据,您需要 DatabaseReference:

的实例
private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

要将上传图片的link保存到实时数据库,需要创建java对象,例如:

public class Image implements Serializable {
    public String downloadUrl;

    public Image() {
    }

    public Image(String dUrl) {
        this.downloadUrl = dUrl;
    }
}

创建 java 对象后,在 onSuccess(UploadTask.TaskSnapshot taskSnapshot) 中添加以下代码行:

Uri downloadUri = taskSnapshot.getDownloadUrl();
Image image = new Image(downloadUri.toString());
String userId = databaseReference.push().getKey();
databaseReference.child(userId).setValue(image);

这将在实时数据库中添加该图像的下载 link。 现在,当您想要 Firebase 存储 中所有图像的列表时,只需使用以下代码:

private ArrayList<Data> list;
...
private void getImagesList() {
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                Data data = new Data(childSnapshot.child("downloadUrl").getValue().toString());
                list.add(data);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}