java.lang.NoClassDefFoundError $$在Kotlin内联$ forEach $ lambda $ 1

rol*_*ndl 33 lambda android kotlin

我目前正在使用版本1.1.1中的Kotlin开发Android应用程序

在我的代码中,我有几种forEach结构的叠加,以便阅读几个MutableListMutableMap.

不幸的是,我的应用程序崩溃了以下堆栈跟踪:

java.lang.NoClassDefFoundError:com.package.fragment.ReminderAddFragment $ onRetrieveBusinessObjects $$ in.sach.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275)in com.smartnsoft.droid4me.app.Droid4mizer inlined $ forEach $ lambda $ 1 .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)at 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 ->
          //...
        }

        //...
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

地点:

  • tutorialCategories是一个List;
  • tutorials是一个List;
  • reminders是一个List;

代码的第275行是mapOfreminders.forEach { _, finalReminders ->.

在调试器中,我可以评估mapOfreminders变量,一切似乎都没问题.

如果有人可以帮助解决这个问题!

Ily*_*lya 73

在几天前阅读Dan Lew的帖子之后,我将提出一个建议,这可能是由于使用Map.forEach { k, v -> }Java 8中的方法引起的,这可能在Android运行时中不可用.

您可以尝试使用来自Kotlin标准库的单个入口参数来使用另一个forEach:

mapOfreminders.forEach { (_, finalReminders) -> }
Run Code Online (Sandbox Code Playgroud)

这里的括号用于将输入参数解构为两个变量:忽略键和finalReminders值.


zha*_*ang 12

java.lang.NoClassDefFoundError在Android 6.0和6.0.1上遇到过这个问题

Map.forEach {key ,value -> }
Run Code Online (Sandbox Code Playgroud)

这个叫java 8 api.

然后,我通过在参数中添加括号来解决这个问题:

Map.forEach {(key ,value) -> }
Run Code Online (Sandbox Code Playgroud)

这叫kotlin api