无法获取在Firebase存储中上传的图像的实际下载网址[重复]

2024-03-29

我正在尝试获取上传到 firebase 数据库的图像的下载网址。但任务Uri imageURL = storageReference.getDownloadUrl();没有给出存储在 firebase 存储中的图像的实际下载 URL,即它给出了这个 - com.google.android.gms.tasks.zzu@27da5837

getdownloadUrl()在以下情况下不起作用,因为它已被弃用: Uri imageUrl = storagereference.getdownloadUrl(); //给出错误

请参阅此处的代码:

final StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("images").child(imageName);

    final UploadTask uploadTask = storageReference.putBytes(data);

    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle unsuccessful uploads
            Toast.makeText(CreateSnapActivity.this, "Upload Failed", Toast.LENGTH_SHORT).show();
        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
            // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.

            //Task<Uri> imageURL = storageReference.getDownloadUrl();  
            //Log.i("URL", imageURL.toString());        // gives this url - com.google.android.gms.tasks.zzu@27da5837 which is not correct


            Task<Uri> urlTask = storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                Log.i("Url", String.valueOf(uri));
                imageUrl = uri.toString();  //Gives the correct url but it cannot store this uri value outside this function i.e for Intent shown below outside this func.
               
                }
            });

            Toast.makeText(CreateSnapActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

            Intent intent = new Intent(CreateSnapActivity.this, ChooseUserActivity.class);
            intent.putExtra("imageName", imageName);
            intent.putExtra("imageURL", imageUrl);  
            intent.putExtra("message", captionEditText.getText().toString());
            startActivity(intent);

        }
    });

Calling getDownloadUrl()启动异步操作,这可能需要一些时间才能完成。因此,在检索下载 URL 时,您的主代码会继续运行,以防止阻止用户。然后当下载 URL 可用时,您的onSuccess被叫。正因为如此,当你的intent.putExtra("imageURL", imageUrl)现在运行,imageUrl = uri.toString()还没跑。

为了证明这确实是正确的,我建议在代码中添加一些日志记录以仅显示流程,或者在调试器中运行它并在我上面指出的行上设置断点。

要修复此问题,任何需要下载 URL 的代码都需要位于onSuccess,或者从那里被调用。这不仅适用于此处,还适用于所有异步运行的代码,其中包括大多数现代云 API。因此,我建议您现在花一些时间研究这种行为,以便您以后能更适应它。

在你的代码中:

final StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("images").child(imageName);

final UploadTask uploadTask = storageReference.putBytes(data);

uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        Toast.makeText(CreateSnapActivity.this, "Upload Failed", Toast.LENGTH_SHORT).show();
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
        Task<Uri> urlTask = storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                imageUrl = uri.toString();
                Toast.makeText(CreateSnapActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(CreateSnapActivity.this, ChooseUserActivity.class);
                intent.putExtra("imageName", imageName);
                intent.putExtra("imageURL", imageUrl);  
                intent.putExtra("message", captionEditText.getText().toString());
                startActivity(intent);
           
            }
        });
    }
});

另请参阅:

  • Firebase Storage 生成的 URL 不允许访问该文件 https://stackoverflow.com/questions/53652406/url-generated-by-firebase-storage-does-not-allow-access-to-the-file/53653522#53653522
  • 如何获取 firebase 存储的下载 url 并更新 firestore 文档? https://stackoverflow.com/questions/62699565/how-to-get-download-url-for-firebase-storage-and-update-firestore-document/62699990#62699990
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法获取在Firebase存储中上传的图像的实际下载网址[重复] 的相关文章

  • 尝试拍摄 https://github.com/appsthatmatter/GraphView 的图表快照时出现 IllegalStateException

    我正在尝试拍摄 GraphView 的快照 但它给出了错误 GraphView 必须在硬件加速模式下使用 我正在使用以下代码来拍摄快照 Bitmap bitmap Bitmap createBitmap view getWidth view
  • 片段开始时显示用于编辑文本的键盘

    当我的片段开始时 我希望我的编辑文本成为焦点 让用户开始输入内容 我可以使用 requestFocus 将其聚焦 但无法显示键盘 我已经尝试过这两种方法 edit EditText view findViewById R id search
  • 如何在android 4.2中显示选项菜单

    我正在尝试在我的测试应用程序中创建菜单选项 当我将清单中的主题设置为默认时 我可以看到菜单 菜单显示在顶部 如果我将清单中的主题设置为 NoTitleBar 我看不到菜单选项 我想在清单中设置主题 NoTitleBar 时获取菜单 如何修复
  • 如何修复第三方 SDK 中重复的 libgnustl_shared.so 文件?

    当我使用 gradle 构建并运行 apk 时 出现以下错误 Error Execution failed for task app transformNative libsWithMergeJniLibsForDebug gt com a
  • 将可渲染节点(相同的旋转、位置和比例)替换为 Sceneform sdk 中的另一个可渲染节点

    我是 Android 版 sceneform sdk 的新手 我已经添加了一个Transformable Node 然后我应用了一些旋转 缩放并改变了它的位置 现在 单击按钮后 我需要放置具有相同旋转 缩放和位置的第二个节点 为此我所做的是
  • 删除对象时删除嵌套字段中的索引

    我仍在使用 Firebase 这次我有一个与删除对象相关的问题 我有如下结构 users UsErId1 name Jack email email protected cdn cgi l email protection UsErId2
  • TabHost 中的 Webview = 以黑屏启动

    我正在尝试在有 4 个选项卡的 tabhost 中使用 webview 所有选项卡都链接到同一个 webview 这很好 除了一个问题 启动时 网络视图是黑色的 单击选项卡 2 3 或 4 使其 活跃起来 我的快速解决方法是使用 setCu
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • 在 Android 运行时更改和应用主题 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Android 运行时更改当前主题 https stackoverflow com questions 2482848 how to change current theme at runti
  • SQLiteConstraintException:错误代码19:约束失败——Android错误

    我已经看到了一些与此相关的其他问题 但没有一个答案似乎真正适用于我的代码 当我尝试插入数据库时 出现 SQLiteConstraintException 错误代码 19 约束失败 错误 这是插入操作的代码 db insert 现在返回 1
  • webView.loadUrl 显示空白屏幕

    我必须加载这些通过使用下面的代码 但最终显示空白屏幕作为输出 您可以检查url代码之间的链接位于last line WebPagerLoader java public class WebPageLoader extends Activit
  • 点击按钮时的 Admob 插页式广告

    我有一个应用程序 我正在使用 admob 横幅 现在我想在点击按钮时显示插页式广告 我的应用程序有 2 个活动 我想在第二个活动上显示插页式广告 第二个活动有一个返回第一个活动的按钮 我想在单击按钮后显示广告 我可以在单击按钮时显示广告 但
  • 如何修补更新 Android Studio (0.80 -> 0.81)?

    我安装了 Android Studio Beta v0 8 0 并下载了 v0 8 1 因为 IDE 不会自动下载 v0 80 并使用新版本修补 Android Studio 的预览系列自动做到了这一点 从他们的网页 http tools
  • 短信管理器在少于 160 个字符时发送多部分消息

    我编写了一个使用短信管理器的应用程序 我用的方法sendTextMessage 但这行不通 现在我正在使用sendMutlipartTextMessage 这是工作 但当它大约 60 个字符时 它会发送多部分消息 这个是正常的 我读过的所有
  • 找不到元素“android.support.constraint.ConstraintLayout”的声明

    我创建了一个名为的 xml 文件activity main sw50dp 但是当我尝试验证它时 它给了我错误 错误 4 42 cvc elt 1 a 找不到元素 android support constraint ConstraintLa
  • 无法获取 android.permission.CLEAR_APP_USER_DATA

    我正在开发需要特殊权限的系统应用程序 由于某种原因 我无法获得 CLEAR APP USER DATA 权限 但我可以使用 INSTALL PACKAGES DELETE PACKAGES 等 什么可能导致这种情况 显现 uses perm
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • Jetpack 中的波浪框组成

    有没有办法用Canvas制作一个顶部有波浪形的盒子 我想知道这个效果是否可以直接用Canvas来实现 不需要有滚动动画 不太清楚你为什么在谈论Canvas 要裁剪这样的视图 您可以使用自定义Shape并将其应用到您的视图中Modifier
  • Android PhoneGap 中的自定义字体

    我尝试为我的应用程序制作自定义字体 为此 我在 html 文件中编写了以下代码 在我的 HTML 正文中
  • 安装 APK 时出现会话“应用程序”错误

    我在将 Android Studio 1 1 编写的项目导入 Android Studio 2 1 2 时遇到困难 每当在平板电脑上测试应用程序之前构建 gradle 时 我都会收到此错误 下面是错误的屏幕截图 有谁知道是什么问题 我尝试过

随机推荐

  • iOS僵尸检测

    在我看来 我的代码中遇到了一个非常困难的问题 它在代码中的不同位置随机崩溃 该项目是一个ARC项目 所以我的程序偶尔会崩溃并显示以下消息 malloc error for object 0xd2dd8b0 incorrect checksu
  • 使用正则表达式计算字符串中的元音

    我刚刚开始学习 JavaScript 却陷入了正则表达式的困境 该程序应该计算输入字符串中元音的数量并显示元音 如果元音没有放在一起 程序运行良好 但如果元音出现在一起 则不会给出正确的值 e g 树 元音将显示为 ee 计数将为 1 Ty
  • RabbitMQ C# API:如何检查绑定是否存在?

    使用 RabbitMQ C API 我如何检查给定队列到给定交换是否存在绑定 很多 RabbitMQ 调用都是幂等的 所以有些人可能会说在这些情况下检查是不必要的 但我认为它们在测试中很有用 您可以使用他们的 REST API 来调用并查看
  • 为什么 sockJS 将“/info”添加到给定的 websocket url 路径

    我想打开一个带有 webapp socket do 路径的 websocket 端口 当我使用 SockJS 并尝试通过代码发起调用时 var socket new SockJS webapp socket do stompClient S
  • sizeof(*ptr) 和 sizeof(struct) 之间的区别

    我尝试了以下程序 struct temp int ab int cd int main int argc char argv struct temp ptr1 printf Sizeof struct temp d n sizeof str
  • Safari 中的 CSS 间距问题?

    我为我的最新项目制作了一个基于列表的导航栏 并在导航的每一侧添加了两个信息栏 它在 Firefox 和 IE 中的表现符合预期 但奇怪的是 Safari 却表现不佳 它在导航栏和右侧信息栏之间留出了很大的空间 CSS body backgr
  • Laravel 雄辩的变异器不适用于更新数据

    我的模型中有用于数据库表字段中的哈希 重新哈希数据的访问器和修改器 例如 public function setFullNameAttribute value this gt attributes full name Helper gete
  • 安装nodejs npm 和 grunt 出现错误

    我不熟悉 Python NodeJS NPM 或 Grunt 但我需要安装它 因为我想尝试一下Github项目 https github com raphaelluchini popcorntime smarttv 我从 node org
  • 如何在 AppFog 中使用 Apache 提供静态内容(WSGI Python 应用程序)

    我在用着AppFog http www appfog comPaaS 系统使用了几天 我喜欢它 它可能是我测试过的最好的 PaaS 系统 我之前使用过其他 3 个 但没有找到有关如何使用 Web 服务器提供静态内容的信息在前端 Apache
  • 从地图中获取一段键

    有没有更简单 更好的方法从 Go 中的映射中获取键的切片 目前我正在迭代地图并将键复制到切片 i 0 keys make int len mymap for k range mymap keys i k i 这是一个老问题 但这是我的两分钱
  • 在 C# 中获取特定时区的日期时间时出现 System.TimeZoneNotFoundException 错误

    我有一个 JSON 文件 其中包含time zone范围 它的值如下London Casablanca Arizona Pacific Time US Canada 等 基于time zone 我想得到DateTime该时区的结果 例如 C
  • Ubuntu 17.04 上 sudo apt-get 更新失败

    运行时sudo apt get update在 ubuntu 17 04 Zesty Zapus 上 我收到以下错误 我已经在错误行上发布了 我想安装 python 库 如 matplotlib 和 tkinter 但由于上述命令未成功运行
  • CSS 文件和不需要的覆盖

    我有一个简单的 HTML 页面 它引用了 3 个 CSS 文件 第一个是仅适用于页面的样式表 另外两个是针对两个独特情态动词的样式 这些模态 CSS 文件不是我创建的 它们很高兴被使用分别地在整个网站的其他页面上 我的问题是 这两个模态 C
  • 1-2 秒后暂停 YouTube 视频

    我正在使用 Youtube Player api 在我的应用程序中播放 YouTube 视频 视频开始播放并在 1 2 秒后暂停 我创建了视频片段和视图组 随后我创建了一些 youtobe 视频视图 视频片段 public static f
  • OpenCV 中 minEnclosureCircle 的意外结果

    我最近使用了 OpenCV 2 4 2 的函数 minEnendingCircle 因为我需要测量一团点的直径 一段时间后 我意识到结果不正确 因此我决定编写一个小例程来计算一组非常小的点的直径 我测试了该函数 1个单点 连续2 4分 仅由
  • 保留一个新对象而无需获取关联

    我在广告实体中有以下映射 class Ad Id Column name id unique true nullable false GeneratedValue strategy GenerationType SEQUENCE gener
  • 实现 ActiveRecord before_find

    我正在使用缓存在表中的关键字构建搜索 在表中查找用户输入的关键字之前 它会被标准化 例如 删除了一些标点符号 如 并对大小写进行了标准化 然后使用规范化的关键字来查找获取搜索结果 我目前正在使用 before filter 处理控制器中的标
  • 导入 React-Router-Dom 后 React App 变为空白

    导入前react router一切正常 现在它构建成功但显示空白页面 这是我的代码 App js import ReactDOM from react dom client import BrowserRouter Routes Route
  • 如何调查 imp.load_module 上的 python2 段错误

    我正在尝试安装和使用dolfin https aur archlinux org packages dolfin bzr 在 Arch Linux 上 使用 Python 2 7 3 找出导致分段的原因的最佳方法是什么 诸如此类的故障 py
  • 无法获取在Firebase存储中上传的图像的实际下载网址[重复]

    这个问题在这里已经有答案了 我正在尝试获取上传到 firebase 数据库的图像的下载网址 但任务Uri imageURL storageReference getDownloadUrl 没有给出存储在 firebase 存储中的图像的实际