为什么我得到java.lang.NoClassDefFoundError时调用getDrawable?



我试图在运行时改变ListView内部按钮上的图标,但是当我的代码调用getDrawable时,例如

getDrawable(android.R.drawable.ic_media_pause)

我从活动的onCreate方法内部得到java.lang.NoClassDefFoundError。当我删除对getDrawable的调用时,应用程序运行良好。

01-29 18:31:43.526 30890-30890/com.p403n1x87.motee E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.p403n1x87.motee, PID: 30890
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/p403n1x87/motee/device/DeviceActivity$onCreate$adapter$1$1;
at com.p403n1x87.motee.device.DeviceActivity.onCreate(DeviceActivity.kt:40)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.p403n1x87.motee.device.DeviceActivity$onCreate$adapter$1$1" on path: DexPathList[[zip file "/data/app/com.p403n1x87.motee-1/base.apk"],nativeLibraryDirectories=[/data/app/com.p403n1x87.motee-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.p403n1x87.motee.device.DeviceActivity.onCreate(DeviceActivity.kt:40) 
at android.app.Activity.performCreate(Activity.java:6251) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Suppressed: java.lang.ClassNotFoundException: com.p403n1x87.motee.device.DeviceActivity$onCreate$adapter$1$1
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 14 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

在试图从匿名类实例内的活动获得意图时看到相同的错误,我意识到我应该明确地请求it的方法,即it.getDrawable。假设构建过程成功完成,这看起来像是Kotlin的错误。

最新更新