Reputation: 1877
I am currently working on an Android application with Kotlin in version 1.1.1
In my code, I have imbrication of several forEach
structures in order to read several MutableList
and MutableMap
.
Unfortunately, my app crashes with the following stacktrace :
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)
Here the code
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 ->
//...
}
//...
}
}
}
}
Where :
tutorialCategories
is a List
;tutorials
is a List
;reminders
is a List
;The line 275 of the code is mapOfreminders.forEach { _, finalReminders ->
.
In the debugger, I can evaluate the mapOfreminders
variable and everything seems to be alright.
If someone can help to resolve this issue !
Upvotes: 37
Views: 5164
Reputation: 631
Seems like this particular error doesn't happen on all phones. I faced a similar issue with Samsung Galaxy S7, where the app was crashing with ClassNotFoundError. This solution works if we still want to use lambda.
Else replacing the lambda with for ((key, value) in map) { ... }
also works.
Upvotes: 2
Reputation: 1051
I encountered this problemjava.lang.NoClassDefFoundError
on Android 6.0 and 6.0.1 by using
Map.forEach {key ,value -> }
this call java 8 api.
And then, I solved this problem by adding brackets to parameter:
Map.forEach {(key ,value) -> }
this call kotlin api
Upvotes: 13
Reputation: 23115
After reading Dan Lew's post a couple days ago, I'll make a suggestion that this can be caused by using Map.forEach { k, v -> }
method from Java 8, which may be unavailable in Android runtime.
You could try to use another forEach with the single entry parameter that comes from the Kotlin standard library:
mapOfreminders.forEach { (_, finalReminders) -> }
Here the parentheses are used to destructure entry parameter into two variables: ignored key and finalReminders
value.
Upvotes: 75