You need to enable JavaScript to run this app. Android Java加载Firebase Storage图片到ImageView遇404错误及按文件名加载方法
优惠活动
大模型
产品
解决方案
定价
更多

Android Java加载Firebase Storage图片到ImageView遇404错误及按文件名加载方法

问题根因定位

你当前遇到的404错误(码值-13010,对象不存在),核心原因是代码里的StorageReference路径被错误重复拼接了,和权限、Glide配置无关:
你现有代码的逻辑是:

// 已经把引用指向了 Images/dogs.jpg
StorageReference storageReference = FirebaseStorage.getInstance().getReference("Images/dogs.jpg");
// 又额外加了一层 .child("dogs.jpg"),实际指向的路径变成了 Images/dogs.jpg/dogs.jpg
storageReference.child("dogs.jpg").getDownloadUrl()...

这个拼接出来的路径和你Storage控制台里实际存的文件路径完全不匹配,自然会返回“对象不存在”的404报错。


第一步:修正路径逻辑,解决404报错

  • 去掉多余的.child()调用:如果你的文件在Firebase Storage控制台的真实存储路径是Images/dogs.jpg,直接对这个基础引用调用方法即可,不要重复拼接文件名
  • 路径核对方法:直接在Firebase Storage控制台找到目标图片,点开文件详情复制完整的存储路径,和代码里传入getReference()的字符串逐字比对——Firebase Storage路径是严格区分大小写的,比如images和Images是两个完全独立的文件夹,拼写、斜杠多写漏写都会触发找不到对象的错误。

修正后的基础加载逻辑示例:

ImageView rImage = findViewById(R.id.rImage);
// 直接指向真实文件路径,不做重复拼接
StorageReference targetRef = FirebaseStorage.getInstance().getReference("Images/dogs.jpg");

targetRef.getDownloadUrl().addOnSuccessListener(uri -> {
    // 拿到下载Uri后用Glide加载
    Glide.with(this).load(uri).into(rImage);
}).addOnFailureListener(e -> {
    // 打印错误日志,定位路径不匹配的问题
    Log.e("StorageDebug", "图片加载失败", e);
});

实现“仅用文件名加载,无需手动复制公开URL”的方案

你要的效果完全可以实现,且不需要手动维护公开链接:

方案1:直接用Glide加载StorageReference(推荐,代码最简洁)

你已经引入了firebase-ui-storage和Glide的依赖,完全不需要额外调用getDownloadUrl()拿临时下载链接,Glide可以直接识别StorageReference类型的加载源,自动完成鉴权、下载、缓存:

ImageView rImage = findViewById(R.id.rImage);
// 路径正确的前提下,直接拿到文件的引用
StorageReference dogImgRef = FirebaseStorage.getInstance().getReference("Images/dogs.jpg");

Glide.with(this)
    .load(dogImgRef)
    .placeholder(R.drawable.ic_placeholder) // 加载中显示的占位图
    .error(R.drawable.ic_load_error) // 加载失败的提示图
    .into(rImage);

注意点:确保你按照官方文档配置的MyAppGlideModule带有@GlideModule注解,否则Glide无法识别StorageReference类型的加载源,会出现直接空白的问题。

方案2:上传时自动记录路径,后续加载无需手动改代码

如果是应用内本地上传图片的场景,可以完全自动化整个流程:

  • 图片上传成功的回调里,拿到对应StorageReference的getPath()字符串,存在本地SharedPreferences或者Firebase Database中
  • 后续加载图片时,直接读取存储的路径字符串,传入getReference()拿到引用,再用Glide加载即可,全程不需要手动复制、修改公开链接。

额外排查提醒

  • 你之前测试公开网络图片能正常加载,说明网络权限、Glide基础配置、ImageView的布局绑定都是正常的,不需要重复排查这类问题
  • 如果修正路径后仍报404,去核对Storage安全规则:权限不足的错误码是-13021,和你当前遇到的“对象不存在”的-13010不是同一类问题,不要混淆。

内容的提问来源于stack exchange,提问作者tech123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 21:06:05