2014-09-05 3 views
0

JNI 라이브러리를 테스트하는 Android 앱이 있습니다.Button onClick NoSuchMethod 예외

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

그런 다음, 주요 활동 :

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을받는 응용 프로그램은 onClick 핸들러가있는 버튼이 있습니다.

나는이 솔루션을 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 
+1

btnGenerate_onClick (보기보기)을 공개 –

답변

6

방법은 외부에서 볼 수 있도록 public해야한다.

편집 : 여기 onClick 속성 처리를위한 안드로이드 소스 코드 - 당신이 당신이 Context 객체에 getClass().getMethod()를 통해 속성에 대한 값으로 전달하는 방법을 얻을 시도하고 있음을 알 수 있습니다에서 link

합니다.

getMethod 오라클 사이트에서 "이 Class 객체가 나타내는 클래스 또는 인터페이스의 지정된 public 멤버 메소드를 반영하는 Method 객체를 리턴합니다."따라서 메소드는 public이어야합니다.

+3

+1로 만듭니다. 설명서에는'... 공개 방법과 일치해야 함 ... 'http://developer.android.com/reference/android/view/View.html#attr_android:onClick –

+0

완벽한 감사합니다. 그 프로그램이 공개되지 않는 한 자체의 방법에 액세스 할 수 없다는 것은 이상합니다. 관련성이없는 오류 메시지가 나타납니다. VM이 나에게 의미있는 오류 메시지를 주었다면, 나는 그 시간을 낭비하지 않았을 것이다 (그것에 대해 미안하다). – jww

+0

@jww 편집을 참조하십시오. – cliffroot