2017-02-07 13 views
5

私の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"); }

行くから、問題を解決するために表示されます。私はスレッドアプリケーションでこれをやっているので、それがエラーの理由であるかどうか分からず、これまではエミュレータで試しただけです。プロジェクトを再構築することで問題は解決しますが、それは非常に時間がかかり、プロジェクトからすべてを削除するという点で面倒です。

これまでのところ、私はエミュレータ内でのみテストしており、本物の電話環境に影響するかどうかは不明です。これらのラムダ式はうまく動作するので、これがバグだと判断するのは安全だと思います。私はそれが既知のものであるかどうか、またそれに対する回避策があるかどうか疑問に思っていました。

+1

ここを見てみましょう:あなたの答えのhttp://stackoverflow.com/questions/41552073/no-virtual-method-com-polidea-rxandroidble-internal-radio-rxbleradioimpllambda – paulsm4

答えて

2

Parthの回答は役に立ちましたが、最終的には私がやっていることに関係なくラムダ式を使ってランタイムエラーが発生しました。 IntellijベースのIDEは単一機能のインタフェースの実装を視覚的にラムダとして表現しているので、頭痛に取り組むのではなく、プロジェクトからすべてを削除することにしました。

+2

私は同じ問題があります。 私は時折NoSuchMethodErrorをランダムに表示します。プロジェクトのクリーンアップはしばらくの間問題を修正します。 これはAndroidの問題追跡ツールで報告されています:https://issuetracker.google.com/issues/37563269 – Ika

3

build.gradleファイルでは、jackOptionsがtrueに設定されていないため、これを次のようにdefaultConfigに追加するだけで動作するはずです。

android { 
defaultConfig { 
    applicationId "com.gfs.mp3lab" 
    minSdkVersion 16 
    targetSdkVersion 25 
    jackOptions { 
     enabled true 
    } 
    ... 
} 
... 

    compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 
+0

Thanks-私の最初の実装は後に動作しませんでしたクリーンで再デプロイします。私はエミュレータをシャットダウンしてからやり直さなければならなかったが、今はすばらしく見える。 – IcedDante

+0

あなたのためにうれしかった@IcedD​​ante –

+0

申し訳ありませんが、この問題を再検討したところ、jackOptionsはゲームチェンジャーではありませんでした。私はオリジナルの質問を編集して詳細を提供します。 – IcedDante

関連する問題