0

JTwitterをAndroidアプリケーションに統合しようとしていますが、古いバージョンのAndroidで回帰テストを行うことにした時点まで、完全に成功しています。Android 2.xでは私のコードはうまく機能しますが、Android 1.5 / 1.6では、Dalvikは次の行にVerifyErrorをスローします。

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

そして、このlogcat出力とスタックトレースを提供します。

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バージョン間の基本的な実装で何が変更された可能性があり、回避策は何であるかを理解しようとしていますか? 同様の質問がしばらく前に回答されましたが、回答はフォーラムの投稿へのリンク切れの形でした。

何かご意見は?

4

1 に答える 1

0

Android 2.0より前は、何かが正しくない場合、ベリファイアはすぐにクラスを拒否していました。2.0以降では、特定の障害の報告は、コードが実際に実行されるまで延期されます。存在しない、またはアクセスできないメソッドを呼び出そうとすることは、そのようなケースの1つです。

これは、ベリファイアの動作が変更された理由の例です。absent関数を呼び出していない場合でも、それを呼び出そうとしているクラス全体が拒否されます。

いくつかの回避策はここにありますが、自分で見つけたようです。

于 2011-01-28T01:11:10.527 に答える