android - 没有内容提供者:path/image.png
问题描述
我试图通过此代码将图像放入 firebase 存储
override fun click(url: String?) {
if (url != null) {
Glide.with(requireContext()).load(url).into(binding.userAvatar)
val uri = Uri.parse(url)
val storageRef = storage.reference
val avatarRef = auth.currentUser?.let { storageRef.child(it.uid).child("avatar.png") }
val uploadTask: UploadTask = avatarRef!!.putFile(uri)
uploadTask.addOnCompleteListener {
if (it.isSuccessful) {
avatarRef.downloadUrl.addOnCompleteListener { url ->
user.userAvatar = url.toString()
Toast.makeText(context, "Upload image success!", Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(context, it.exception?.message, Toast.LENGTH_SHORT).show()
it.exception?.message?.let { it1 -> Log.e(TAG, it1) }
}
}
}
}
但我得到这个错误
An unknown error occurred, please check the HTTP result code and inner exception for server response.
Code: -13000 HttpResult: 0
No content provider: /storage/emulated/0/Download/download.png
java.io.FileNotFoundException: No content provider: /storage/emulated/0/Download/download.png
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
at android.content.ContentResolver.openInputStream(ContentResolver.java:1187)
at com.google.firebase.storage.UploadTask.<init>(UploadTask.java:137)
at com.google.firebase.storage.StorageReference.putFile(StorageReference.java:241)
at com.animals.snowy.profile.SetProfileFragment.click(SetProfileFragment.kt:87)
at com.animals.snowy.util.GetImage.lambda$getOneImage$3$GetImage(GetImage.java:109)
at com.animals.snowy.util.GetImage$$ExternalSyntheticLambda3.onClick(Unknown Source:6)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
祝大家拥有美好的一天! 对不起,我的代码太长了,所以我必须输入一些东西
当你成功时,你可以为你所爱的人带来好东西。如果你身体健康,你可以和他们一起享受那些美好的事物。
我通过从文件中获取 url 解决了这个问题
override fun click(url: String?) {
if (url != null) {
Glide.with(requireContext()).load(url).into(binding.userAvatar)
val file = File(url)
val uriAvatar = Uri.fromFile(file)
val storageRef = storage.reference
val avatarRef = auth.currentUser?.let { storageRef.child(it.uid).child("avatar.png") }
val uploadTask: UploadTask = avatarRef!!.putFile(uriAvatar)
uploadTask.addOnCompleteListener {
if (it.isSuccessful) {
avatarRef.downloadUrl.addOnCompleteListener { url ->
user.userAvatar = url.toString()
Toast.makeText(context, "Upload image success!", Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(context, it.exception?.message, Toast.LENGTH_SHORT).show()
it.exception?.message?.let { it1 -> Log.e(TAG, it1) }
}
}
}
}
解决方案
推荐阅读
- python - 使用分离轴定理和 Pygame 实现碰撞
- amazon-web-services - AWS ElasticBeanstalk Terraform DisableIMDSv1 未知配置设置
- c++ - 为什么在 C++ 中的其他文件中使用全局变量时需要 extern 而不是函数的前向声明
- list - 是否可以在同一个剧本(Ansible)中循环进入两个不同的列表?
- python - 错误:找不到匹配的打包发行版(来自 pytest)
- c# - DB2 提供者 .NET Core 3.1
- python - Onnx 运行时错误“SVC 转换器不支持不同于前 n 个整数的类”是什么意思?
- javascript - 使用 TypeScript 将属性添加到不同文件中的现有类型
- vim - 如何将这两种模式结合和否定在一起?
- c# - 如何在 C# 中将函数转换为比较器