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

