簡體   English   中英

保存后不顯示個人資料圖像(它只顯示空白屏幕)

[英]Profile image not showing after saving(it just shows blank white screen)

我正在嘗試上傳用戶個人資料圖像並存儲在 firebase 中。我的圖像成功存儲在 firebase 存儲和用戶數據庫中。

當我上傳圖像時,它顯示在我的屏幕上,但是一旦我保存並重新打開設置以查看個人資料圖像,它就不會顯示,它只會顯示空白的白屏(但重新打開時會顯示姓名和電話,只有圖像不會顯示)展示)

我附上了從 db 獲取值並在 ui 中顯示的代碼,還添加了 saveUserInformation(),當用戶單擊保存圖像按鈕時調用該代碼,此函數將姓名、電話和個人資料圖像保存在 db 中。 我在下面添加了數據庫的屏幕截圖,並添加了我得到的錯誤片段。

我究竟做錯了什么?

這是我控制台記錄時滑翔輸出的內容:profile img here:Target for: android.support.v7.widget.AppCompatImageView{528bbb2 V.ED..C.. ......ID 0,0-300,300 # 7f0a00b9 app:id/profileImage}[CDS]rx timeout: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.android.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.android.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.android.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.android.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.android.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 android.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 android.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.android.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 android.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: android.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 android.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 android.os.Parcel.openFileDescriptor(Native Method) at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:270) at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:966) at android.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 android.os.Parcel.openFileDescriptor(Native Method) at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:270) at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:200) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:966) at android.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)

在此處輸入圖片說明

我也有這個問題,解決了如下問題

RequestOptions options = new RequestOptions()
       .fitCenter()
       .error(errorImageDrawble)
       .diskCacheStrategy(DiskCacheStrategy.ALL)
       .priority(priority.HIGH);

Glide
     .with(applicationContext)
     .load(mProfileImageUrl)
     .apply(options)
     .into(mProfileImage);

您收到以下錯誤:

com.google.android.gms.tasks.zzu@c0645c1 加載失敗

因為您正在嘗試顯示不存在的圖像。 正如我在你的數據庫中看到, profileImageUrl屬性包含一個圖像URL無效

在此處輸入圖片說明

看到紅線了嗎? 它實際保存的是內存中對象的地址,而不是圖像 url。 發生這種情況是因為您正在對downloadUrl對象調用toString()方法。 所以你獲取下載 url 的方式是不正確的。 是獲取 url 的正確方法。 獲得圖像的 url 並將其添加到數據庫后,一切都會按預期工作。

這是我更新 imagePath 偵聽器代碼的函數,現在可以正常工作了-

 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() }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM