首页 > 解决方案 > 没有内容提供者: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) }
                }
            }
        }
    }

标签: androidfirebasefirebase-storage

解决方案


推荐阅读