我目前正在使用版本1.1.1中的Kotlin开发Android应用程序
在我的代码中,我有几个 forEach
结构的imbrication,以便读取几个 MutableList
和 MutableMap
.
不幸的是,我的应用程序崩溃了以下堆栈跟踪:
com.martnsoft.droid4me.app中的com.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275)中的java.lang.NoClassDefFoundError:com.package.fragment.ReminderAddFragment $ onRetrieveBusinessObjects $$ inlined $ forEach $ lambda $ 1 . Droid4mizer.onRetrieveBusinessObjects(Droid4mizer.java:552)位于com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal(Droid4mizer.java:606)的com.smartnsoft.droid4me.app.Droid4mizer.access $ 000(Droid4mizer.java:46)at com.smartnsoft.droid4me.app.Droid4mizer $ 1.run(Droid4mizer.java:197)java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:423)at java.util.concurrent.FutureTask.run(FutureTask .java:237)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)
这里的代码
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
变量,一切似乎都没问题 .
如果有人可以帮助解决这个问题!
3 回答
似乎在所有手机上都不会发生这种特殊错误 . 我遇到了与三星Galaxy S7类似的问题,其中应用程序崩溃了ClassNotFoundError . 如果我们仍然想要使用lambda,这个解决方案是有效的 . 否则将lambda替换为**( Map 中的(键,值)) **也可以 .
在几天前阅读Dan Lew的_1461668之后,我将建议使用Java 8中的
Map.forEach { k, v -> }
方法,这可能是在Android运行时中不可用的 .您可以尝试使用另一个forEach来自Kotlin标准库的单个入口参数:
这里括号用于将输入参数解构为两个变量:ignored键和
finalReminders
值 .我在Android 6.0和6.0.1上使用了遇到此问题
java.lang.NoClassDefFoundError
这个叫java 8 api .
然后,我通过在参数中添加括号来解决这个问题:
这叫kotlin api