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
相关产品推荐
相关产品推荐

