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

如何在Android中获取firebase中存储的所有图像的URL?,android,firebase,android-image,firebase-storage,Android,Firebase,Android Image,Firebase Storage,我正在做一个Android项目,我想帮助检索Firebase存储中存储的所有URL,并在imageview中显示它们。给定代码的问题是,它只获取一个下载url。如何获取存储在Firebase中的所有图像的所有url。 简而言之:有一个活动是我将图像保存到firebase,另一个活动是我想检索Imageview中的所有图像。我可以用什么方式来做? 谢谢 if(requestCode==GALLERY\u INTENT&&resultCode==RESULT\u OK) { mProgress.se

我正在做一个Android项目,我想帮助检索Firebase存储中存储的所有URL,并在imageview中显示它们。给定代码的问题是,它只获取一个下载url。如何获取存储在Firebase中的所有图像的所有url。 简而言之:有一个活动是我将图像保存到firebase,另一个活动是我想检索Imageview中的所有图像。我可以用什么方式来做? 谢谢

if(requestCode==GALLERY\u INTENT&&resultCode==RESULT\u OK)
{
mProgress.setMessage(“上传…”);
mProgress.show();
Uri=data.getData();
StorageReference文件路径=mStorage.child(“照片”).child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
mProgress.disclose();
Uri downloadUri=taskSnapshot.getDownloadUrl();
Picasso.with(MainActivity.this).load(downloadUri.fit().centerCrop().into(mImageView);
Toast.makeText(MainActivity.this,“上载完成”,Toast.LENGTH_LONG.show();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(MainActivity.this,“上载失败”,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) {

        }
    });
UploadTask UploadTask=storageRef.putBytes(数据、storageMetadata);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//使用保存到数据库
//taskSnapshot.getMetadata().getCustomMetadata(StringKeys.SOME_键);
}
}).addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(UploadTask.TaskSnapshot TaskSnapshot){
}
});

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


要从数据库中读取或写入数据,您需要一个
DatabaseReference
的实例:

private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
要将上传图像的链接保存到实时数据库,您需要创建java对象,例如:

public class Image implements Serializable {
    public String downloadUrl;

    public Image() {
    }

    public Image(String dUrl) {
        this.downloadUrl = dUrl;
    }
}
创建java对象后,在onSuccess(UploadTask.TaskSnapshot TaskSnapshot)
中添加以下代码行:

这将在实时数据库中添加该图像的下载链接。 现在,当您需要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) {
        }
    });
}
私有数组列表;
...
私有void getImagesList(){
databaseReference.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot childSnapshot:DataSnapshot.getChildren()){
数据数据=新数据(childSnapshot.child(“downloadUrl”).getValue().toString());
列表。添加(数据);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}

你能给我一个建议吗?
Uri downloadUri = taskSnapshot.getDownloadUrl();
Image image = new Image(downloadUri.toString());
String userId = databaseReference.push().getKey();
databaseReference.child(userId).setValue(image);
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) {
        }
    });
}