如何从firebase存储获取imageUrl以存储在firebase实时数据库中?

迷你凯特

基本上我创建了一个名为“Club”的类。我成功地将一个新俱乐部保存到 firebase 实时数据库,没有任何实际问题,直到我想将一个 imageURL(称为 clubImage)从 Firebase Storage 添加到我的俱乐部类。

我能够使用下面的代码成功地将我的图像上传到 Firebase 存储。

    private void uploadImage() {
        //upload selected image to database
        //code from https://code.tutsplus.com/tutorials/image-upload-to-firebase-in-android-application--cms-29934
             if(filePath != null)
        {
            final ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.setTitle("Uploading...");
            progressDialog.show();

            final StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());


            ref.putFile(filePath)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            progressDialog.dismiss();
                            Toast.makeText(AddClubActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            progressDialog.dismiss();
                            Toast.makeText(AddClubActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
                                    .getTotalByteCount());
                            progressDialog.setMessage("Uploaded "+(int)progress+"%");
                        }
                    });
        }
    }

这一切正常。但是,在相同的方法中,我也有此代码,我尝试在其中获取上传图像的 downloadURL。

            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Uri downloadUrl = uri;
                    clubImage = downloadUrl.toString();
                }
            });

我知道为同一件事有两个 OnSuccessListeners 效率低下,我只是不知道如何同时上传图像和获取 downloadUrl。无论如何,这不起作用,我的新俱乐部在没有 clubImage 字段的情况下保存。我收到错误:E/StorageException: StorageException has been发生。对象在该位置不存在。

有谁知道如何解决这一问题?谢谢。

弗兰克·范·普费伦

我知道为同一件事有两个 OnSuccessListeners 效率低下

您有两个要尝试完成的任务:

  1. 上传一个文件
  2. 获取该文件的下载 URL

由于这是两个独立的任务,因此您需要两个OnSuccessListeners. 这没有什么低效的,任务也不同。

上传后获取下载 URL的 Firebase 文档准确显示了如何连续完成这两个任务:

final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.putFile(file);

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();
        } else {
            // Handle failures
            // ...
        }
    }
});

您会注意到此代码首先完成uploadTask(上传文件),然后才启动新任务以获取下载 URL。按此顺序执行任务可防止出现“该位置不存在对象”错误消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在实时数据库中存储 Firebase 云消息

来自分类Dev

如何从Firebase中的实时数据库获取数据

来自分类Dev

用户注册期间如何在Firebase的实时数据库中存储数据?

来自分类Dev

如何从firebase存储中获取imageUrl并存储在Xcode 10 swift 4.2中的firebase数据库中

来自分类Dev

Firebase 实时数据库中的存储大小是如何计算的?

来自分类Dev

Firebase-获取下载URL(Firebase存储)并将其保存在Firebase实时数据库中

来自分类Dev

如何在android studio 3.0中连接firebase并通过按钮将数据存储在实时数据库中

来自分类Dev

将Firebase实时数据库数据存储在Firestore中?

来自分类Dev

如何获取firebase实时数据库的数据

来自分类Dev

Firebase 实时数据库,从键值对中获取数据

来自分类Dev

如何从Firebase实时数据库获取最新记录

来自分类Dev

如何在flutter中从Firebase实时数据库中获取数据?

来自分类Dev

如何从android中的firebase实时数据库中获取数据

来自分类Dev

如何从Firebase实时数据库中删除?

来自分类Dev

如何更新Firebase实时数据库中的位置?

来自分类Dev

如何从Web中的Firebase实时数据库获取数据?

来自分类Dev

如何从Firebase实时数据库中获取数据并将其显示在微调器上

来自分类Dev

Flutter:如何从Firebase实时数据库中获取新添加的记录?

来自分类Dev

如何从Firebase实时数据库中的.set()获取自动生成的ID?

来自分类Dev

如何获取Firebase实时数据库中添加的最后一项?

来自分类Dev

如何从Android中的Firebase实时数据库获取价值?

来自分类Dev

如何在 Firebase 实时数据库中获取子名称

来自分类Dev

Firebase身份验证/通知实时数据库和数据存储

来自分类Dev

首次安装android应用时,如何从Firebase实时数据库获取数据库

来自分类Dev

Firebase:实时数据库和文件存储之间的差异

来自分类Dev

Firebase存储或实时数据库,用于很少更新的文件

来自分类Dev

React Native - Firebase 实时数据库和存储数组

来自分类Dev

Android Firebase 实时数据库获取数据太慢

来自分类Dev

无法从 Firebase 实时数据库获取数据

Related 相关文章

  1. 1

    在实时数据库中存储 Firebase 云消息

  2. 2

    如何从Firebase中的实时数据库获取数据

  3. 3

    用户注册期间如何在Firebase的实时数据库中存储数据?

  4. 4

    如何从firebase存储中获取imageUrl并存储在Xcode 10 swift 4.2中的firebase数据库中

  5. 5

    Firebase 实时数据库中的存储大小是如何计算的?

  6. 6

    Firebase-获取下载URL(Firebase存储)并将其保存在Firebase实时数据库中

  7. 7

    如何在android studio 3.0中连接firebase并通过按钮将数据存储在实时数据库中

  8. 8

    将Firebase实时数据库数据存储在Firestore中?

  9. 9

    如何获取firebase实时数据库的数据

  10. 10

    Firebase 实时数据库,从键值对中获取数据

  11. 11

    如何从Firebase实时数据库获取最新记录

  12. 12

    如何在flutter中从Firebase实时数据库中获取数据?

  13. 13

    如何从android中的firebase实时数据库中获取数据

  14. 14

    如何从Firebase实时数据库中删除?

  15. 15

    如何更新Firebase实时数据库中的位置?

  16. 16

    如何从Web中的Firebase实时数据库获取数据?

  17. 17

    如何从Firebase实时数据库中获取数据并将其显示在微调器上

  18. 18

    Flutter:如何从Firebase实时数据库中获取新添加的记录?

  19. 19

    如何从Firebase实时数据库中的.set()获取自动生成的ID?

  20. 20

    如何获取Firebase实时数据库中添加的最后一项?

  21. 21

    如何从Android中的Firebase实时数据库获取价值?

  22. 22

    如何在 Firebase 实时数据库中获取子名称

  23. 23

    Firebase身份验证/通知实时数据库和数据存储

  24. 24

    首次安装android应用时,如何从Firebase实时数据库获取数据库

  25. 25

    Firebase:实时数据库和文件存储之间的差异

  26. 26

    Firebase存储或实时数据库,用于很少更新的文件

  27. 27

    React Native - Firebase 实时数据库和存储数组

  28. 28

    Android Firebase 实时数据库获取数据太慢

  29. 29

    无法从 Firebase 实时数据库获取数据

热门标签

归档