В своем проекте я пытаюсь использовать код, написанный на Java 8, в приложении для Android, используя плагин Retrolambda и Lightweight-Stream-API для обхода совместимости кода. Исходный проект хорошо работает на платформе Java (уточнено).
После переноса кода на Android мне пришлось лишь внести небольшие изменения в код (в основном о получении экземпляра класса com.annimon.stream.Stream
, потому что в массивах и коллекциях в Android отсутствует метод .stream()
, поэтому мне нужно использовать статические методы класса Stream с массивом/коллекцией в качестве параметра ), но это даже не должно касаться моей проблемы. На данный момент ошибок компиляции нет, приложение запускается, работает, но при вызове вылетает:
Optional<Room> result = INamed.getO(name, Stream.of(rooms));
С ошибкой:
FATAL EXCEPTION: main
Process: cz.alois_seckar.vseadventrura, PID: 8109
java.lang.NoSuchMethodError: No static method getO(Ljava/lang/String;Lcom/annimon/stream/Stream;)Lcom/annimon/stream/Optional; in class Lcz/alois_seckar/vseadventrura/eu/pedu/adv16s_fw/game_txt/INamed; or its super classes (declaration of 'cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.game_txt.INamed' appears in /data/data/cz.alois_seckar.vseadventrura/files/instant-run/dex/slice-slice_1-classes.dex)
at cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.test_util.default_game_txt.game.Apartment.getORoom(Apartment.java:166)
at cz.alois_seckar.vseadventrura.eu.pedu.adv16s_fw.test_util.default_game_txt.game.Room$$Lambda$1.apply(Unknown Source)
at com.annimon.stream.Stream$12.nextIteration(Stream.java:539)
...
И класс Room
реализует INamed
через своих предков (Room
расширяет AItemContainer
, который расширяет ANamed
, который реализует INamed
).
Так что я не очень понимаю, в чем должна быть проблема. Я подозреваю, что плагин Retrolambda не работает точно так же, как Java 8, но не может сказать, что и как изменить... Также проблема может быть совершенно в другом, я только начиная с андроида...
Я могу предоставить больше кода, если это необходимо, но я думаю, что все важное было сказано. Заранее благодарю за любую помощь.
com.annimon.stream.Stream;
... JDK даже не может работать, так как он не включен в библиотеку Android... - person Ellrohir   schedule 22.04.2016