2017-01-13 2 views
1

J'essaie d'accéder à RealmList de classe de modèle dans la boucle forEach.Retrolambda avec RealmList

Tentative: 1

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

tentative: 2

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

Sur les deux tentative, je suis arrivé erreur

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

Comment puis-je résoudre cette erreur?

+0

@TimCastelijns oui ... retrolambda a fonctionné sur l'écouteur de clic mais cette erreur s'est produite seulement sur RealmList. –

Répondre

1

Retrolambda fournit simplement la syntaxe à partir de Java 8, pas d'API. Donc, la nouvelle date & API Temps, Streams API, etc. ne sera pas disponible avec simplement utiliser Retrolambda. Si vous souhaitez utiliser de nouvelles API Java 8 sous Android, vous devez ajouter des bibliothèques supplémentaires en plus de Retrolambda. Très beau port de l'API Stream est sur https://github.com/aNNiMON/Lightweight-Stream-API

En plus: si vous souhaitez utiliser le plus récent Java 8 API de date dans Android, vous pouvez utiliser ce port: http://www.threeten.org/threetenbp/

EDIT

J'ai une impression que ma réponse précédente n'était pas 100% claire. Votre problème maintenant est que vous voulez utiliser la méthode ArrayList.forEach qui n'est pas disponible dans Java 7 qui est utilisé dans Android SDK. Android Studio affiche ces compléments car il pensait que vous utilisez le compilateur Jack et ces API sont disponibles. Mais vous devez ignorer cela et utiliser l'un des ports API Java 8 ou passer au compilateur Jack qui vous permet d'utiliser la syntaxe Java 8 et les API sans Retrolambda.

2

List.forEach( est une méthode ajoutée dans JDK8.

Android API 24 (comme dans Android 7.0) a JDK8, tout ce qui est en dessous n'a pas JDK8.

Vous devez donc utiliser une bibliothèque de compatibilité au lieu des méthodes JDK8, par exemple this one.