2017-03-18 94 views
14
拉姆達$ 1

我目前工作的一個Android應用程序與科特林版本1.1.1

在我的代碼,我有幾個forEach結構的疊瓦爲了閱讀幾個MutableListMutableMap

不幸的是,我的應用程序崩潰,並顯示以下堆棧跟蹤:

java.lang.NoClassDefFoundError: com.package.fragment.ReminderAddFragment$onRetrieveBusinessObjects$$inlined$forEach$lambda$1 at com.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275) at com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjects(Droid4mizer.java:552) at com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal(Droid4mizer.java:606) at 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) at 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變量,一切似乎都沒有問題。

如果有人能幫助解決這個問題!

+0

你能說明一下,你使用的是什麼版本的Kotlin? – Ilya

+0

我正在使用Kotlin 1.1.1。我編輯了我的帖子。 – rolandl

+0

你能發佈更多的上下文,就像你的包含和變量定義一樣嗎?你能以某種方式在崩潰前獲取代碼中的版本嗎?如果你得到一個沒有class-def的錯誤,你要麼分發你的二進制文件而沒有必要的依賴關係,要麼使用不同的版本運行,然後你使用它。 –

回答

27

幾天前,在閱讀Dan Lew的post之後,我會提出一個建議,這可能是由於Java 8中使用Map.forEach { k, v -> }方法造成的,這可能在Android運行時中不可用。

您可以嘗試使用其他forEach與來自科特林標準庫中的一個條目參數:

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

這裏括號用於項目參數,解構到兩個變量:忽略鍵和finalReminders值。

+0

它的工作原理!謝謝你! – rolandl

+0

謝謝,剛剛花了1.5個小時,認爲Proguard是問題所在。 –

+0

真棒,我的票後被拒絕我對此感到非常沮喪...有趣的部分它沒有崩潰在我的LG G5 Android 7.0 希望新的gradle版本與Java 1.8的支持將過時了這一點。 – Mario