You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发Android应用无法上传图片至Firebase Storage问题求助

问题排查与解决方案

核心故障原因

你的代码存在变量遮蔽问题:
类中预先声明了全局可空属性 private var selectedPhotoUri: Uri? = null 用于存储选中的图片URI,但在 onActivityResult 回调中你重新声明了同名局部变量 val selectedPhotoUri = data.data,选中的图片URI仅赋值给了生命周期极短的局部变量,全局属性始终为null。
调用上传方法 uploadImageToFirebase() 时,第一行判断 if (selectedPhotoUri == null) return 会直接终止方法执行,因此不会触发任何上传逻辑,也不会有相关报错输出。

修复方案

仅需要修改onActivityResult中的赋值逻辑,指定赋值给全局属性即可:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == 100 && resultCode == RESULT_OK && data != null && data.data != null) {
        Toast.makeText(this@RegisterActivity, "clicked image selected", Toast.LENGTH_SHORT)
            .show()
        // 去掉val关键字,或者加this前缀,赋值给全局属性
        this.selectedPhotoUri = data.data
        Toast.makeText(this@RegisterActivity, "$selectedPhotoUri", Toast.LENGTH_SHORT).show()
        imageView.setImageURI(selectedPhotoUri)
    }
}

可选优化项

  • 当前使用的startActivityForResult已被官方废弃,建议替换为Activity Result API适配更高版本Android系统
  • 你当前的Firebase Storage安全规则完全放开读写权限,正式上线前请修改为仅授权用户可访问,避免资源被盗用产生额外费用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:00:04