首页 文章

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

提问于
浏览
32

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

在我的代码中,我有几个 forEach 结构的imbrication,以便读取几个 MutableListMutableMap .

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

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 ->
          //...
        }

        //...
      }
    }
  }
}

地点:

  • tutorialCategoriesList ;

  • tutorialsList ;

  • remindersList ;

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

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

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

3 回答

  • 71

    似乎在所有手机上都不会发生这种特殊错误 . 我遇到了与三星Galaxy S7类似的问题,其中应用程序崩溃了ClassNotFoundError . 如果我们仍然想要使用lambda,这个解决方案是有效的 . 否则将lambda替换为**( Map 中的(键,值)) **也可以 .

  • 1

    在几天前阅读Dan Lew的_1461668之后,我将建议使用Java 8中的 Map.forEach { k, v -> } 方法,这可能是在Android运行时中不可用的 .

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

    mapOfreminders.forEach { (_, finalReminders) -> }
    

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

  • 9

    我在Android 6.0和6.0.1上使用了遇到此问题 java.lang.NoClassDefFoundError

    Map.forEach {key ,value -> }
    

    这个叫java 8 api .

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

    Map.forEach {(key ,value) -> }
    

    这叫kotlin api

相关问题