android - pass - kotlin receive lambda
java.lang.NoClassDefFoundError $$ inline $ forEach $ lambda $ 1 en Kotlin (3)
Después de leer la post Dan Lew hace un par de días, haré una sugerencia de que esto puede deberse al uso del método Map.forEach { k, v -> }
de Java 8, que puede no estar disponible en el tiempo de ejecución de Android.
Podría intentar usar otro forEach con el parámetro de entrada única que proviene de la biblioteca estándar de Kotlin:
mapOfreminders.forEach { (_, finalReminders) -> }
Aquí los paréntesis se utilizan para destruir el parámetro de entrada en dos variables: clave ignorada y valor finalReminders
.
Actualmente estoy trabajando en una aplicación de Android con Kotlin en la versión 1.1.1
En mi código, tengo imbricación de varias estructuras forEach
para leer varias MutableList
y MutableMap
.
Desafortunadamente, mi aplicación se bloquea con el siguiente stacktrace:
java.lang.No. ClassDefFoundError: com.package.fragment.ReminderAddFragment $ onRetrieveBusinessObjects $$ inlined $ paraEach $ lambda. .onRetrieveBusinessObjects (Droid4mizer.java:552) en com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal (Droid4mizer.java:606). .smartnsoft.droid4me.app.Droid4mizer $ 1.run (Droid4mizer.java:197) en java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:423) en java.util.concurrent.FutureTask.run (FutureTask. java: 237) en java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1113) en java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:588) en java.lang. .java: 818)
Aqui el codigo
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 ->
//...
}
//...
}
}
}
}
Dónde :
-
tutorialCategories
es unaList
; -
tutorials
es unaList
; -
reminders
es unaList
;
La línea 275 del código es mapOfreminders.forEach { _, finalReminders ->
.
En el depurador, puedo evaluar la variable mapOfreminders
y todo parece estar bien.
Si alguien puede ayudar a resolver este problema!
Encontré este problema java.lang.NoClassDefFoundError
en Android 6.0 y 6.0.1 usando
Map.forEach {key ,value -> }
esta llamada java 8 api.
Y luego, resolví este problema agregando paréntesis al parámetro:
Map.forEach {(key ,value) -> }
esta llamada kotlin api
Parece que este error en particular no ocurre en todos los teléfonos. Me enfrenté a un problema similar con el Samsung Galaxy S7, donde la aplicación se bloqueaba con ClassNotFoundError. Esta solución funciona si todavía queremos usar lambda. De lo contrario, la sustitución de la lambda con ** para ((clave, valor) en el mapa) {...} ** también funciona.