Я ищу использовать Лямбда-выражения в моем проекте Android (мин. Sdk: 16, target sdk: 25), но сталкиваются со многими проблемами.NoSuchMethodError с Android Lambdas
Первой проблемой является то, что я разрабатываю и отлаживаю свое приложение с помощью эмулятора, развертывая и исправляя ошибки несколько раз, когда, из-за синего, приложение полностью перестанет загружаться.
я получаю следующую трассировку стека в моем журнале:
java.lang.NoSuchMethodError: No direct method (Ljava/lang/Object;)V in class Lcom/androidtest/-$Lambda$1; or its super classes (declaration of 'com.androidtest.-$Lambda$1' appears in /data/app/com.androidtest-2/base.apk)
Я позволил использовать лямбда-выражения, как описано в документации андроида со следующим кодом в моем приложении файл/build.gradle:
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.gfs.mp3lab"
minSdkVersion 16
targetSdkVersion 25
...
}
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Я принял предложение Parth Pandya и добавил в jackOptions параметр Я мой файл build.gradle и считаю, что для решения этой проблемы, но после восстановления моего проекта я теперь sproadically получить другую ошибку:
java.lang.IncompatibleClassChangeError: Class 'com.gfs.jotsalot.-$Lambda$1' does not implement interface 'java.lang.Runnable' in call to 'void java.lang.Runnable.run()' (declaration of 'android.os.Handler' appears in /system/framework/framework.jar) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95)
Замена лямбда-выражения, как представляется, решить эту проблему, так происходит из
() -> { Log.i(TAG, "Hey There"); }
в
new Runnable() {
@Override
public void run() {
Log.i(TAG, "Hey There");
}
}
работ. Я делаю это в потоковом приложении, поэтому я не уверен, если это причина ошибки, и до сих пор я только пробовал ее на эмуляторе. Реконструкция проекта устраняет проблему, но это очень трудоемко, и хлопот вреден для того, чтобы удалить все из моего проекта.
До сих пор я тестировал только внутри эмулятора и не уверен, повлияет ли он на подлинную телефонную среду. Поскольку эти лямбда-выражения работают очень хорошо (пока они этого не сделают), я думаю, можно с уверенностью заключить, что это ошибка. Мне просто интересно, известно ли это, и если есть какие-то обходные пути.
Посмотрите здесь: http://stackoverflow.com/questions/41552073/no-virtual-method-com-polidea-rxandroidble-internal-radio-rxbleradioimpllambda – paulsm4