2010-11-29 5 views
0

JTwitter를 Android 애플리케이션에 통합하려고 시도하고 있으며 이전 Android 버전에 대한 회귀 테스트를 수행 할 때까지 완전히 성공했습니다. 안드로이드 2.X에서 내 코드는 잘 작동하지만, 안드로이드 1.5/1.6 달빅은 다음 줄에 VerifyError를 던졌습니다 :이 로그 캣 출력 및 스택 추적Android에서 JTwitter VerifyError 2.0 이전 버전

OAuthSignpostClient oauthClient 
     = new OAuthSignpostClient(KEY_TWITTER, SECRET_TWITTER, "oob"); 

및 제공 :

Could not find method javax.swing.JOptionPane.showInputDialog, referenced from method winterwell.jtwitter.OAuthSignpostClient.askUser 
VFY: unable to resolve static method 1703: Ljavax/swing/JOptionPane;.showInputDialog (Ljava/lang/Object;)Ljava/lang/String; 
VFY: rejecting opcode 0x71 at 0x0000 
VFY: rejected Lwinterwell/jtwitter/OAuthSignpostClient;.askUser (Ljava/lang/String;)Ljava/lang/String; 
Verifier rejected class Lwinterwell/jtwitter/OAuthSignpostClient; 
Shutting down VM 
threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
Uncaught handler: thread main exiting due to uncaught exception 
java.lang.VerifyError: winterwell.jtwitter.OAuthSignpostClient 
    at com.wirelessdesigns.android.AuthActivity.onCreate(AuthActivity.java:37) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4203) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
    at dalvik.system.NativeStart.main(Native Method) 

나 '를 이 문제에 영향을 줄 수있는 Android 버전과 해결 방법은 기본 구현에서 변경되었을 수있는 것을 파악하려고합니다. A similar question은 잠시 뒤로 대답했지만 답변은 현재 포럼 게시물에 대한 죽은 링크의 형태로 진행되었습니다.

의견이 있으십니까?

+0

분명히 OAuthSignpostClient는 레벨 5 이상에서 도입 된 API를 사용하여 구현됩니다. JTwitter.jar에서 OAuthSignpostClient.java를 추출하여 정확히 무엇인지 찾아 낼 수 있어야합니다. 지금 당장 시도했지만 JDK가 손상된 것으로 보입니다.

+0

예외 바로 위에 logcat에 나타나는 내용을 게시 할 수 있습니까? 문제가있는 곳을 정확히 알려주는 "VFY"가있는 몇 줄이어야합니다 (아마도 어설픈 방식으로). 확인 프로그램은 2.0 이상에서 다르게 작동합니다. 2.0 이전 버전에서는 오류가 발생하면 클래스를 즉시 거부하고 2.0 이상에서는 경고를 기록하고 코드가 실행될 때 실행되는 "항상 throw"명령어를 삽입합니다. 추가 정보 : http://android.git.kernel.org/?p=platform/dalvik.git;a=blob_plain;f=docs/verifier.html;hb=HEAD. – fadden

+0

지연으로 인해 죄송합니다.이 문제를 해결하기위한 해결 방법을 수행했지만 결국이 작업을 수행 한 이유와 더 나은 해결 방법이 있는지 계속 관심을 갖습니다. 게시물의 스택 추적을 업데이트하여 직전의 logcat 출력을 포함 시켰습니다. 그것은 Swing 클래스 (안드로이드는 분명히 가지고 있지 않음)에 대한 참조를 찾고 있지만 askUser() 메소드를 호출하지 않았습니다! – Devunwired

답변

0

안드로이드 2.0 이전에, 검증자는 뭔가 잘못되었을 때 즉시 클래스를 거부했습니다. 2.0 및 이후 버전에서는 코드가 실제로 실행될 때까지 특정 실패에 대한보고가 연기됩니다. 존재하지 않거나 액세스 할 수없는 메소드를 호출하려고 시도하는 것이 그러한 경우입니다.

이것은 확인 자 동작이 변경된 이유의 예입니다. 당신이 결석 한 기능을 부르지 않고 있다고하더라도, 부름을 시도하는 전체 반이 거절 당하고 있습니다.

일부 해결 방법은 here이지만 사용자가 직접 찾은 것 같습니다.

+0

도움을 제공해 주셔서 감사합니다. 해결 방법은 1.5/1.6 (성가신)에 대한 지원을 중단하는 것입니다. 그러나 최근에 저는 JTwitter의 개발자가 오류 발견에 대한 귀하의 지시에 따라 Swing을 자신의 라이브러리에서 분리하도록 도와 왔습니다. 건배! – Devunwired

+0

... 실제로 Swing은 JTwitter와 분리되었습니다. 죄송합니다. –