我目前正在使用版本1.1.1中的Kotlin开发Android应用程序
在我的代码中,我有几个forEach
结构的叠加,以便阅读多个MutableList
和MutableMap
。
不幸的是,我的应用程序崩溃了以下堆栈跟踪:
java.lang.NoClassDefFoundError: com.package.fragment.ReminderAddFragment $ onRetrieveBusinessObjects $$内嵌$ $的forEach拉姆达$ 1 在 com.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275) 在 com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjects(Droid4mizer.java:552) 在 com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal(Droid4mizer.java:606) 在 com.smartnsoft.droid4me.app.Droid4mizer.access $ 000(Droid4mizer.java:46) 在com.smartnsoft.droid4me.app.Droid4mizer $ 1.run(Droid4mizer.java:197) 在 java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:423) 在java.util.concurrent.FutureTask.run(FutureTask.java:237)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:588) 在java.lang.Thread.run(Thread.java:818)
这里是代码
tutorialCategories.forEach { (_, _, _, _, _, tutorials) ->
tutorials.forEach { tutorial ->
if (tutorial.id == simpleReminderFromExtra.tutorialId)
{
//...
val mapOfreminders = mutableMapOf<Int, MutableList<Reminder>>()
val reminders = ReminderServices.getReminderByTutorialId(simpleReminderFromExtra.tutorialId)
reminders.forEach { reminder ->
//...
}
mapOfreminders.forEach { _, finalReminders ->
//...
finalReminders.forEach { reminder ->
//...
}
//...
}
}
}
}
其中:
tutorialCategories
是List
; tutorials
是List
; reminders
是List
; 代码的第275行是mapOfreminders.forEach { _, finalReminders ->
。
在调试器中,我可以评估mapOfreminders
变量,一切似乎都没问题。
如果有人可以帮忙解决此问题!
答案 0 :(得分:73)
几天前读完Dan Lew的post之后,我会建议使用Java 8中的BigDecimal
方法,这可能在Android运行时无法使用。
您可以尝试将另一个forEach与来自Kotlin标准库的单个条目参数一起使用:
String
此处括号用于将输入参数解构为两个变量:忽略键和Map.forEach { k, v -> }
值。
答案 1 :(得分:11)
我在Android 6.0和6.0.1上通过使用
遇到了这个问题java.lang.NoClassDefFoundError
Map.forEach {key ,value -> }
此调用Java 8 API。
然后,我通过在参数中添加方括号来解决此问题:
Map.forEach {(key ,value) -> }
此调用kotlin api
答案 2 :(得分:1)
似乎在所有手机上都没有发生这种特殊错误。我遇到了与三星Galaxy S7类似的问题,其中应用程序崩溃了ClassNotFoundError。如果我们仍然想要使用lambda,这个解决方案是有效的。
否则用for ((key, value) in map) { ... }
替换lambda也有效。