2017-01-13 2 views
1

Я пытаюсь получить доступ к классу RealmList в классе forEach.Retrolambda с RealmList

Попытка: 1

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

Покушение: 2

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

На обеих попытке я получил ошибку

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

Как устранить эту ошибку?

+0

@TimCastelijns yes ... retrolambda работал над кликером, но эта ошибка произошла только на RealmList. –

ответ

1

Retrolambda просто предоставляет синтаксис Java 8, а не API. Таким образом, новая Дата & API времени, API потоков и т. Д. Не будут доступны только с использованием Retrolambda. Если вы хотите использовать новые API Java 8 в Android, вам необходимо добавить дополнительные библиотеки, кроме Retrolambda. Очень хороший порт Стрим API на https://github.com/aNNiMON/Lightweight-Stream-API

В дополнение: если вы хотите использовать новейший Java 8 Date API в Android вы можете использовать этот порт: http://www.threeten.org/threetenbp/

EDIT

У меня создалось впечатление что мой предыдущий ответ не был на 100% понятен. Теперь проблема заключается в том, что вы хотите использовать метод ArrayList.forEach, который недоступен в Java 7, который используется в Android SDK. Android Studio отображает такие доработки, поскольку, по его мнению, вы используете компилятор Jack, и этот API доступен. Но вам нужно проигнорировать это и использовать один из портов API Java 8 или переключиться на компилятор Jack, который позволяет использовать синтаксис Java 8 и API без Retrolambda.

2

List.forEach( - это метод, добавленный в JDK8.

Android API 24 (как в Android 7.0) имеет JDK8, все, что ниже, не имеет JDK8.

Поэтому вам нужно использовать библиотеку совместимости вместо методов JDK8, например this one.

Смежные вопросы