使用 Glide 加载图像会导致异常

Loading image with Glide causes exception

我正在尝试使用 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;
        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.onDataChange(Post_CommnentsApi.kt:75)
        at com.google.firebase.database.Query.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.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" 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.onDataChange(Post_CommnentsApi.kt:75) 
        at com.google.firebase.database.Query.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.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) 

从堆栈跟踪中,可以观察到一些事情。

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

您可以执行以下操作来找出您的问题:

  • 注释掉加载图像的代码(滑动实现)
  • 注释掉从 firebase 到模型的对象映射
  • 从 firebase 记录您的数据,以确保 structure/format 正在加载它们。

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

  • 仔细检查来自 firebase 的 Comment 对象,并确定与您的评论模型(数据类型、children/properties、e.t.c 的数量)或您用于映射它的任何模型的差异来自何处.

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

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

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