【问题标题】:Loading image with Glide causes exception使用 Glide 加载图像会导致异常
【发布时间】:2021-11-22 20:36:09
【问题描述】:

我正在尝试使用 Glide 从 url 获取可绘制对象,但一直失败。

我使用的是最新的 Glide 版本 4.12.0:implementation 'com.github.bumptech.glide:glide:4.12.0'

我已经尝试过使用 RequestListener,但一直失败,因此我正在寻找替代方法。

imageUrl = https://firebasestorage.googleapis.com/v0/b/podsync-dev.appspot.com/o/commentImages%2FAB5D35BB-E925-486A-A280-81358636D8EB?alt=media&token=daf6f99c-323a-4cfc-af97-3354d9f8e4e9

这是我的代码:

comment.imageURL?.takeIf { loadImage }?.let { imageUrl ->
    Glide.with(context).load(comment.imageURL).into(object : CustomTarget<Drawable>() {
        override fun onLoadFailed(errorDrawable: Drawable?) {
            // code
        }
        override fun onResourceReady(resource: Drawable,
                                     transition: Transition<in Drawable>?) {

            // code
        }
        override fun onLoadCleared(placeholder: Drawable?) {
            // code
        }
    })
}

这是我得到的异常:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/galdahan/podsync/Models/Comment$Companion$transform$5$1;
        at com.galdahan.podsync.Models.Comment$Companion.transform(Comment.kt:71)
        at com.galdahan.podsync.Models.Comment$Companion.transform$default(Comment.kt:47)
        at com.galdahan.podsync.FIREBASE_API.Post_CommnentsApi$observeComments$1.onDataChange(Post_CommnentsApi.kt:75)
        at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.0:179)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.galdahan.podsync.Models.Comment$Companion$transform$5$1" on path: DexPathList[[dex file "/data/data/com.galdahan.podsync/code_cache/.overlay/base.apk/classes6.dex", zip file "/data/app/~~u26Hv32StBK7WzdCxOOa-A==/com.galdahan.podsync-gxbX5HkcbxEI2A_Cnrev2A==/base.apk"],nativeLibraryDirectories=[/data/app/~~u26Hv32StBK7WzdCxOOa-A==/com.galdahan.podsync-gxbX5HkcbxEI2A_Cnrev2A==/lib/x86_64, /system/lib64, /system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.galdahan.podsync.Models.Comment$Companion.transform(Comment.kt:71) 
        at com.galdahan.podsync.Models.Comment$Companion.transform$default(Comment.kt:47) 
        at com.galdahan.podsync.FIREBASE_API.Post_CommnentsApi$observeComments$1.onDataChange(Post_CommnentsApi.kt:75) 
        at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.0:179) 
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75) 
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63) 
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

【问题讨论】:

  • 你没有说出网址的样子。
  • @blackapps 对,我已经用链接更新了问题,谢谢。
  • Caused by: java.lang.ClassNotFoundException: Didn't find class "com.galdahan.podsync.Models.Comment$Companion$transform$5$1" on path: DexPathList[[dex file "/data/data/com.galdahan.podsync/code_cache/.overlay/base.apk/classes6.dex", zip file "/data/app/~~u26Hv32StBK7WzdCxOOa-A==/com.galdahan.podsync-gxbX5HkcbxEI2A_Cnrev2A==/base.apk"],nativeLibraryDirectories=[/data/app/~~u26Hv32StBK7WzdCxOOa-A==/com.galdahan.podsync-gxbX5HkcbxEI2A_Cnrev2A==/lib/x86_64, /system/lib64, /system_ext/lib64]] 这和 Glide 有什么关系?尝试不使用 Glide 下载文件。

标签: android android-glide


【解决方案1】:

从堆栈跟踪中,可以观察到以下几点。

  • 您正在从 Firebase 加载数据。
  • 当 Firebase 通知您更改时,您可以通过某种形式将数据映射到 podsync/Models/ 中的模型。

您可以采取以下措施来找出您的问题:

  • 注释掉您的代码(glide 实现)以加载图像
  • 注释掉从 Firebase 到模型的对象映射
  • 从 Firebase 记录您的数据,以确保它们被加载的结构/格式。

此时,您的应用不应崩溃。继续;

  • 仔细检查来自 firebase 的 Comment 对象,并确定差异来自您的评论模型(数据类型、子项/属性的数量等)或您用于映射它的任何模型。

如果您正在监听onDataChange 中的数据变化,您可以使用 try/catch 从快照中获取值并在转换之前记录它(正如我之前提到的)。

一旦您确定预期对象中的字段,相应地更新您的模型,然后访问 imageUrl 属性并将其传递给 glide。

总而言之,glide 不是导致此崩溃的原因,而是您的数据被映射到本地模型的方式。

【讨论】:

  • 你是对的,我已经更新了问题的代码,请看第一行。崩溃的原因是因为我在第一行使用了lettakeIf,我用一个简单的if 语句替换了它们并且它已修复。但我不明白为什么...... Glide 不知道如何使用 Kotlin 的函数?也许我需要添加一个特殊的依赖项才能让 Glide 与 Kotlin 一起工作?
  • 那很好。我建议您学习标准库中包含的 Kotlin 内置函数 - 它们很方便,但是,如果误用,它们可能会出乎意料地倾斜。万事如意!
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2016-05-09
  • 2017-12-17
相关资源
最近更新 更多