java.lang.NoSuchMethodError:没有静态方法“myMethod”

问题描述 投票:0回答:5

我有一个扩展方法:

fun StoresClientFragment?.onClickButtonBack(){
   this?.listener?.onStoresFragmentClickBtnMenu()
}

应用程序安装没有任何错误;但是当在运行时调用该方法时,它会给出以下错误:

java.lang.NoSuchMethodError:没有静态方法 onClickButtonBack (Lcom/app/common_client/ui/fragment /stores/StoresClientFragment;) V 在 Lcom/app/common_client/commons/CommonsAppTypeGroupKt 类中;或其 超类(声明 “com.app.common_client.commons.CommonsAppTypeGroupKt”出现在 /data/app/com.myapp.client-DWp0y3iNC3tsmBZkowlpfw==/base.apk!classes2.dex).

我启用了多重分包功能

在build.gradle中

android {
    defaultConfig {
        multiDexEnabled = true
    }
}

dependencies {
   implementation 'androidx.multidex:multidex:2.0.1'
}

在应用类

class ApplicationClient : MultiDexApplication(){
}

在清单中

<application
        android:name=".commons.application.ApplicationClient"

注意:我正在使用产品风味和模块,该方法位于某些产品风味共享的 src 中

sourceSets {
         flavorA {
             java.srcDirs + = "src/sharedFolder/java" //here is 'onClickButtonBack' method
         }
         flavorB {
             java.srcDirs + = "src/sharedFolder/java"
         }
}
android android-studio kotlin android-productflavors android-module
5个回答
28
投票

Build -> Rebuild Project
帮助了我。这似乎是 Android Studio 代码缓存的一个错误


10
投票

我已经解决了,但是我不知道为什么,我唯一做的就是更改方法所在文件的名称。

MyFile.kt 通过 MyNewFile.kt

fun StoresClientFragment? .onClickButtonBack () {
     this? .listener? .onStoresFragmentClickBtnMenu ()
}

希望对有同样经历的人有帮助,也希望有人知道为什么会这样,分享一下,谢谢


1
投票

我在我的案例中解决了这个问题,更改了它试图从中获取方法的文件的包。

我的设置是 2 个 kotlin 模块(A 依赖于 B)。两者具有相同的包名称和类。当我尝试从 A 中使用 B.method() 时,它似乎正在尝试调用 A.method() 。

不是这方面的专家。正是我注意到的


0
投票

我有两个名称完全相同的文件,1 个在我的主项目中,1 个在我的测试包中。由于某种原因,这种冲突,在重命名我的测试包中的文件后,一切又恢复正常了。


0
投票

在我的例子中,是另一个模块中的可组合函数。我解决了它添加

android{
    buildFeatures {
       compose = true
    } 
    composeOptions {
       kotlinCompilerExtensionVersion = "1.5.2"
    }
}

到模块的gradle文件。

© www.soinside.com 2019 - 2024. All rights reserved.