私のAndroidプロジェクト(min sdk:16、target sdk:25)にラムダ式が使用されていますが、多くの問題が発生しています。NoSuchMethodError with 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の提案を取り、私のbuild.gradleファイルにjackOptions PARAMTERを追加し、問題を解決することを信じていますが、私のプロジェクトを再構築した後、私は今sproadically別のエラーを取得:
0123を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)
ラムダ式を交換するので、
new Runnable() {
@Override
public void run() {
Log.i(TAG, "Hey There");
}
}
作品に
() -> { Log.i(TAG, "Hey There"); }
行くから、問題を解決するために表示されます。私はスレッドアプリケーションでこれをやっているので、それがエラーの理由であるかどうか分からず、これまではエミュレータで試しただけです。プロジェクトを再構築することで問題は解決しますが、それは非常に時間がかかり、プロジェクトからすべてを削除するという点で面倒です。
これまでのところ、私はエミュレータ内でのみテストしており、本物の電話環境に影響するかどうかは不明です。これらのラムダ式はうまく動作するので、これがバグだと判断するのは安全だと思います。私はそれが既知のものであるかどうか、またそれに対する回避策があるかどうか疑問に思っていました。
ここを見てみましょう:あなたの答えのhttp://stackoverflow.com/questions/41552073/no-virtual-method-com-polidea-rxandroidble-internal-radio-rxbleradioimpllambda – paulsm4