receive pass parameter functions examples android lambda kotlin

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 una List ;
  • tutorials es una List ;
  • reminders es una List ;

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.