首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按钮NoSuchMethod onClick异常

按钮NoSuchMethod onClick异常
EN

Stack Overflow用户
提问于 2014-09-05 11:29:29
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
<RelativeLayout
    ...
    <Button
        ...
        android:id="@+id/btnGenerate"           
        android:text="@string/btn_generate"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:onClick="btnGenerate_onClick"/>
</RelativeLayout>

然后,在主要活动中:

代码语言:javascript
复制
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

我从安卓按钮setOnClickListener设计帮助中删除了解决方案,所以我不知道为什么它不起作用。

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-05 11:30:57

方法应该是public,这样就可以从外部看到它。

编辑:这是用于处理onClick属性- 链接的Android源代码。

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

Oracle判断的getMethod“返回反映由该类对象表示的类或接口的指定公共成员方法的方法对象”,因此该方法必须是public

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25684908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档