2017-01-13 4 views
1

Ich versuche RealmList der Modellklasse in forEach Schleife zugreifen.Retrolambda mit RealmList

Versuch: 1

realmList.forEach(obj -> { System.out.println("value"+obj.getValue())}); 

Versuch: 2

realmList.forEach((ModelClass obj) -> { System.out.println("value"+obj.getValue())}); 

Auf beiden Versuch i Fehler bekam

java.lang.NoClassDefFoundError:activites.MainActivity$$Lambda$1

, wie ich diesen Fehler behebe?

+0

@TimCastelijns ja ... retrolambda arbeitete auf Klick-Listener, aber dieser Fehler trat nur auf RealmList auf. –

Antwort

1

Retrolambda bietet nur die Syntax von Java 8, nicht API. So neue Datum & Zeit API, Streams API, etc. wird nicht verfügbar sein, nur mit RetroLambda. Wenn Sie neue Java 8 APIs in Android verwenden möchten, müssen Sie neben RetroLambda zusätzliche Bibliotheken hinzufügen. Sehr schöne Hafen von Stream-API ist auf https://github.com/aNNiMON/Lightweight-Stream-API

Außerdem: Wenn Sie neueste Java 8 Datum API in Android verwenden möchten, können Sie diesen Port verwenden: http://www.threeten.org/threetenbp/

EDIT

Ich habe den Eindruck, dass meine vorherige Antwort nicht 100% klar war. Ihr Problem besteht nun darin, dass Sie die Methode "ArrayList.forEach" verwenden möchten, die in Java 7, das im Android SDK verwendet wird, nicht verfügbar ist. Android Studio zeigt solche Komplettierungen an, da es dachte, dass Sie den Jack-Compiler verwenden und diese API verfügbar ist. Aber Sie müssen das ignorieren und einen der Java 8-API-Ports verwenden oder zum Jack-Compiler wechseln, mit dem Sie Java 8-Syntax und APIs ohne RetroLambda verwenden können.

2

List.forEach( ist eine in JDK8 hinzugefügte Methode.

Android API 24 (wie in Android 7.0) hat JDK8, irgendetwas darunter hat kein JDK8.

Sie müssten also eine Kompatibilitätsbibliothek anstelle der JDK8-Methoden wie this one verwenden.

Verwandte Themen