android - 按钮 onClick 的 NoSuchMethod 异常

标签 android button nosuchmethoderror

我有一个正在测试 JNI 库的 Android 应用程序。该应用有一个带有 onClick 处理程序的按钮:

<RelativeLayout
    ...
    <Button
        ...
        android:id="@+id/btnGenerate"           
        android:text="@string/btn_generate"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:onClick="btnGenerate_onClick"/>
</RelativeLayout>

然后,在主 Activity 中:

public class MainActivity extends Activity {
    ...

    protected void btnGenerate_onClick(View view)
    {
        // Do some work...
        String str = <some result>; 

        final TextView lblNumbers = (TextView)findViewById(R.id.lblNumbers);
        if(lblNumbers != null)
        {
            lblNumbers.setText(str);
        }
    }
}

当我点击按钮时,我收到一个 NoSuchMethodException

我从 Android Button setOnClickListener Design Help 中提取了解决方案,所以我不确定为什么它不起作用。

为什么代码会导致 NoSuchMethod 异常?


09-05 07:20:57.417: W/dalvikvm(10563): threadid=1: thread exiting with uncaught exception (group=0x40aae228)
09-05 07:20:57.437: E/AndroidRuntime(10563): FATAL EXCEPTION: main
09-05 07:20:57.437: E/AndroidRuntime(10563): java.lang.IllegalStateException: Could not find a method btnGenerate_onClick(View) in the activity class com.cryptopp.prng.MainActivity for onClick handler on view class android.widget.Button with id 'btnGenerate'
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.view.View$1.onClick(View.java:3069)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.view.View.performClick(View.java:3549)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.view.View$PerformClick.run(View.java:14393)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.os.Handler.handleCallback(Handler.java:605)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.os.Looper.loop(Looper.java:154)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.app.ActivityThread.main(ActivityThread.java:4945)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at java.lang.reflect.Method.invokeNative(Native Method)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at java.lang.reflect.Method.invoke(Method.java:511)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at dalvik.system.NativeStart.main(Native Method)
09-05 07:20:57.437: E/AndroidRuntime(10563): Caused by: java.lang.NoSuchMethodException: btnGenerate_onClick [class android.view.View]
09-05 07:20:57.437: E/AndroidRuntime(10563):    at java.lang.Class.getConstructorOrMethod(Class.java:460)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at java.lang.Class.getMethod(Class.java:915)
09-05 07:20:57.437: E/AndroidRuntime(10563):    at android.view.View$1.onClick(View.java:3062)
09-05 07:20:57.437: E/AndroidRuntime(10563):    ... 11 more

最佳答案

该方法应该是public 以便可以从外部看到它。

编辑: 这是处理 onClick 属性的 Android 源代码 - link

在那里您可以看到它正在尝试通过 Context 对象上的 getClass().getMethod() 获取您作为属性值传递的方法。

getMethod Oracle 站点判断“返回一个 Method 对象,该对象反射(reflect)了由该 Class 对象表示的类或接口(interface)的指定公共(public)成员方法”,因此该方法必须是 public

关于android - 按钮 onClick 的 NoSuchMethod 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684908/

相关文章:

android - 无法创建文件夹 "debug"Android Studio

android - 在 Android 4.4 上使用非默认短信应用发送短信

android - 从使用 Picasso 加载的 ImageView 获取位图

JQUERY:当两个字段更改其值时触发提交按钮

asp.net-mvc - MVC 在按钮单击时获取 id

java - Selenium 在 Java Web 项目上运行时抛出 "NoSuchMethodError"

hibernate - java.lang.NoSuchMethodError : javax/persistence/spi/PersistenceUnitInfo. getValidationMode()Ljavax/persistence/ValidationMode

java - 如何从 Android 应用程序调用 Java Web 服务?

java - 保存状态按钮sharedpreferences Android

java - ServerBuilder.forPort(端口) - java.lang.NoSuchMethodError