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

时间:2017-05-19 06:17:25

标签: android firebase android-image firebase-storage

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

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();
            }
        });
    }

2 个答案:

答案 0 :(得分:2)

我认为没有用于获取存储在firebase存储中的所有文件的API。 当我保存文件时,我曾经在实时数据库中存储文件元数据,包括文件名,下载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) {

        }
    });

答案 1 :(得分:0)

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)中添加以下代码行:

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

这将在实时数据库中添加该图像的下载链接。 现在,当您需要 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) {
        }
    });
}