【问题标题】:How to get URLs of all images stored in firebase in Android?如何在Android中获取存储在firebase中的所有图像的URL?
【发布时间】:2017-05-19 06:17:24
【问题描述】:

我正在做这个 Android 项目,我需要帮助来检索存储在 Firebase Storage 中的所有 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();
            }
        });
    }

【问题讨论】:

    标签: android firebase android-image firebase-storage


    【解决方案1】:

    我认为没有 API 可以获取存储在 firebase 存储中的所有文件。 当我保存文件时,我习惯将文件元数据包括文件名,下载网址等存储在实时数据库中。

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

    编辑:

    这是我的做法。

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

    【讨论】:

    • 你能给我一个方法吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-04
      • 2020-10-29
      • 1970-01-01
      • 2021-04-05
      • 2017-08-10
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多