2017-03-18 16 views
14

Obecnie pracuję nad aplikacji Android z Kotlin w wersji 1.1.1

W moim kodu, mam imbrication kilku forEach struktur w celu przeczytać kilka następujących po sobie: MutableList i.

Niestety, moje app ulega awarii z następującym 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)

tutaj kod

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

     //... 
     } 
    } 
    } 
} 

Gdzie:

  • tutorialCategories jest List;
  • tutorials jest List;
  • reminders jest List;

Linia 275 kodu to mapOfreminders.forEach { _, finalReminders ->.

W debugerze mogę ocenić zmienną mapOfreminders i wszystko wydaje się być w porządku.

Jeśli ktoś może pomóc rozwiązać ten problem!

+0

Czy możesz również określić, jakiej wersji Kotlin używasz? – Ilya

+0

Używam Kotlin 1.1.1. Zmieniłem mój post. – rolandl

+0

Czy możesz dodać więcej kontekstów, takich jak twoje definicje elementów i zmiennych? Czy potrafisz w jakiś sposób pobrać wersję w kodzie przed awarią? Jeśli otrzymujesz błąd braku klasy błędów, rozprowadzasz plik binarny bez wymaganych zależności lub używasz innej wersji niż ta, którą zbudowałeś. –

Odpowiedz

27

Po przeczytaniu kilku dni temu przez Dana Lwa post, zasugeruję, że może to być spowodowane użyciem metody Map.forEach { k, v -> } z Java 8, która może być niedostępna w środowisku wykonawczym systemu Android.

Można spróbować użyć innego forEach z parametrem pojedynczego wpisu, który pochodzi z Kotlin standardowej biblioteki:

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

tu nawiasach służą do destructure parametr wejścia do dwóch zmiennych: ignorowane klucza i finalReminders wartość.

+0

To działa! Thk ty! – rolandl

+0

Dziękuję, spędziłem 1,5 godziny na tym, myśląc, że Proguard był problemem. –

+0

Niesamowite, po tym, jak mój bilet został odrzucony, byłem tak sfrustrowany tą ... zabawną częścią, która nie zawiesiła się na moim LG G5 Android 7.0 Mam nadzieję, że nowa wersja z obsługą java 1.8 przestanie być aktualna. – Mario

Powiązane problemy