有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓配置文件图像保存后不显示(仅显示空白白色屏幕)

我正在尝试上载用户配置文件图像并存储在firebase中。我的图像成功存储在firebase存储和用户数据库中

当我上传显示在屏幕上的图像时,但一旦我保存并重新打开设置以查看配置文件图像,它不会显示,它只会显示空白的白色屏幕(但重新打开时,名称和电话显示,只有图像不会显示)

我附加了从db获取值并显示在ui中的代码,还添加了saveUserInformation(),当用户单击save image按钮时会调用该函数,该函数会将name、phone和profileimage保存在db中。我在下面添加了数据库的截图,还添加了我得到的错误片段

我做错了什么

这是glide在我控制台记录时的输出: 这里介绍img:Target for:安卓。支持v7。小装置。AppCompatImageView{528BB2 V.ED..C..ID0,0-300300#7f0a00b9应用程序:ID/profileImage}[CDS]接收超时:0

mCustomerDatabase.addValueEventListener(object :ValueEventListener{ override fun onDataChange(dataSnapshot: DataSnapshot) { if(dataSnapshot.exists() && dataSnapshot.childrenCount>0){ val map:Map<*,*> = dataSnapshot.value as Map<*,*> if(map["name"] !=null){ mName=map["name"].toString() mNameField.setText(mName) } if(map["phone"]!=null){ mPhone=map["phone"].toString() mPhoneField.setText(mPhone) } if(map["profileImageUrl"]!=null){ mProfileImageUrl=map["profileImageUrl"].toString() Glide.with(applicationContext).load(mProfileImageUrl).into(mProfileImage) val a=Glide.with(applicationContext).load(mProfileImageUrl).into(mProfileImage) print("profile img here:$a") } } } override fun onCancelled(p0: DatabaseError) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } })

private fun saveUserInformation(){ mName=mNameField.text.toString() mPhone=mPhoneField.text.toString() val userInfo=HashMap<String,Any>() userInfo.put("name",mName) userInfo.put("phone",mPhone) mCustomerDatabase.updateChildren(userInfo) if(resultUri!=null){ val imagePath:StorageReference=mStorage.child("customer_profile_image").child(userId).child(resultUri.lastPathSegment ) val uploadTask:UploadTask=imagePath.putFile(resultUri) uploadTask.addOnSuccessListener(OnSuccessListener <UploadTask.TaskSnapshot>(){taskSnapshot-> val downloadUrl: Task<Uri> =taskSnapshot.storage.downloadUrl val newImage= HashMap<String,Any>() newImage["profileImageUrl"] = downloadUrl.toString() mCustomerDatabase.updateChildren(newImage) }).addOnFailureListener(OnFailureListener() { Toast.makeText(this,"Profile image not uploaded",Toast.LENGTH_SHORT).show() }) } finish() }

Load failed for com.google.安卓.gms.tasks.zzu@c0645c1 with size [300x300] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 causes: java.io.FileNotFoundException(/com.google.安卓.gms.tasks.zzu@c0645c1: open failed: ENOENT (No such file or directory)) java.io.FileNotFoundException(No such file or directory) java.io.FileNotFoundException(No such file or directory) call GlideException#logRootCauses(String) for more detail Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, LOCAL There was 1 cause: java.io.FileNotFoundException(/com.google.安卓.gms.tasks.zzu@c0645c1: open failed: ENOENT (No such file or directory)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 cause: java.io.FileNotFoundException(/com.google.安卓.gms.tasks.zzu@c0645c1: open failed: ENOENT (No such file or directory)) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: /com.google.安卓.gms.tasks.zzu@c0645c1: open failed: ENOENT (No such file or directory) Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class 安卓.os.ParcelFileDescriptor, LOCAL There was 1 cause: java.io.FileNotFoundException(No such file or directory) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 cause: java.io.FileNotFoundException(No such file or directory) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: No such file or directory Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class 安卓.content.res.AssetFileDescriptor, LOCAL There was 1 cause: java.io.FileNotFoundException(No such file or directory) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.FileNotFoundException: No such file or directory 02-04 15:21:14.109 25281-25281/com.sarah.taxi I/Glide: Root cause (1 of 3) java.io.FileNotFoundException: /com.google.安卓.gms.tasks.zzu@c0645c1: open failed: ENOENT (No such file or directory) at libcore.io.IoBridge.open(IoBridge.java:487) at java.io.FileInputStream.<init>(FileInputStream.java:76) at java.io.FileInputStream.<init>(FileInputStream.java:103) at 安卓.content.ContentResolver.openInputStream(ContentResolver.java:689) at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResourceFromUri(StreamLocalUriFetcher.java:85) at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:60) at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:15) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) Caused by: 安卓.system.ErrnoException: open failed: ENOENT (No such file or directory) at libcore.io.Posix.open(Native Method) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) at libcore.io.IoBridge.open(IoBridge.java:473) at java.io.FileInputStream.<init>(FileInputStream.java:76)  at java.io.FileInputStream.<init>(FileInputStream.java:103)  at 安卓.content.ContentResolver.openInputStream(ContentResolver.java:689)  at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResourceFromUri(StreamLocalUriFetcher.java:85)  at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:60)  at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:15)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  at java.lang.Thread.run(Thread.java:818)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)  02-04 15:21:14.110 25281-25281/com.sarah.taxi I/Glide: Root cause (2 of 3) java.io.FileNotFoundException: No such file or directory at 安卓.os.Parcel.openFileDescriptor(Native Method) at 安卓.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:270) at 安卓.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200) at 安卓.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:966) at 安卓.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:894) at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:22) at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:14) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:397) at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:153) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:144) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) Root cause (3 of 3) java.io.FileNotFoundException: No such file or directory at 安卓.os.Parcel.openFileDescriptor(Native Method) at 安卓.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:270) at 安卓.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200) at 安卓.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:966) at 安卓.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:894) at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:22) at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:13) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:397) at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:153) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:144) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:397) at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:153) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:144) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:49) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)

enter image description here

Tags:  

共 (3) 个答案

  1. # 1 楼答案

    您将收到以下错误:

    Load failed for com.google.android.gms.tasks.zzu@c0645c1

    因为您正试图显示一个不存在的图像。正如我在数据库中看到的,profileImageUrl属性包含一个无效的图像url

    enter image description here

    看到红线了吗?它实际上保存的是内存中对象的地址,而不是图像url。发生这种情况是因为您正在对downloadUrl对象调用toString()方法。因此,您获取donwload url的方式是不正确的This是获取url的正确方法。一旦您获得了图像的url并将其添加到数据库中,一切都将按预期工作

  2. # 2 楼答案

    这是我更新imagePath侦听器代码的函数,该代码现在运行良好-

    &13; 第13部分,;
    private fun saveUserInformation(){
            mName=mNameField.text.toString()
            mPhone=mPhoneField.text.toString()
            val userInfo=HashMap<String,Any>()
            userInfo.put("name",mName)
            userInfo.put("phone",mPhone)
            mCustomerDatabase.updateChildren(userInfo)
            if(resultUri!=null){
                val imagePath:StorageReference=mStorage.child("customer_profile_image").child(userId).child(resultUri.lastPathSegment )
                val uploadTask:UploadTask=imagePath.putFile(resultUri)
    
                uploadTask.addOnSuccessListener(OnSuccessListener <UploadTask.TaskSnapshot>(){taskSnapshot->
    
     //*********************This is the upadated part of code                   imagePath.downloadUrl.addOnSuccessListener(OnSuccessListener<Uri>{resultUri->
                            val downloadUrl=resultUri.toString()
                            val newImage= HashMap<String,Any>()
                            newImage["profileImageUrl"] = downloadUrl
                            mCustomerDatabase.updateChildren(newImage)
                        }).addOnFailureListener(OnFailureListener() {
                            Toast.makeText(this,"Profile image not",Toast.LENGTH_SHORT).show()
                        })
    //*******************************************************************************
    
    
                }).addOnFailureListener(OnFailureListener() {
                    Toast.makeText(this,"Profile image not uploaded",Toast.LENGTH_SHORT).show()
                })
            }
            finish()
        }
    和#13;
    和#13;
  • # 3 楼答案

    我也有这个问题,并解决了如下问题

    RequestOptions options = new RequestOptions()
           .fitCenter()
           .error(errorImageDrawble)
           .diskCacheStrategy(DiskCacheStrategy.ALL)
           .priority(priority.HIGH);
    
    Glide
         .with(applicationContext)
         .load(mProfileImageUrl)
         .apply(options)
         .into(mProfileImage);