2012-08-22 10 views
14

このエラーが発生しました JNIエラー(アプリのバグ):古くなったグローバル参照にアクセスしましたAndroid OS v4でアプリを実行すると、 Android v2.3での同じアプリケーションこのエラーは発生しません。エラー:JNIエラー(アプリのバグ):古くなったグローバル参照にアクセスしました

このエラーは、私は誰もが私を助けることができる引数

として文字列配列を渡す私はAsyncTaskクラスを呼び出す時点で起こります?

+2

(http://android-developers.blogspot.ie/2011/11/jni-local-reference-changes-in-ics.html)そのICSは可能性のあるマルチスレッドバグをより厳密に検証しますが、おそらくそれにぶつかりましたか? – skolima

答えて

14

このエラーは、誤ったパラメータタイプのメソッドを呼び出すと発生します。

メソッドシグネチャが、渡すものと正確に一致することを確認してください。

jmethodID mid = env->GetMethodID(cls, methodName, "([Ljava/lang/String;)V"); 

あなたはそれを自分で作成している場合は、それはこのようになります:文字列配列について

jclass stringCls = env->FindClass("java/lang/String"); 
jobjectArray mStringArray = env->NewObjectArray(mSize, stringCls, NULL); 

をあなたの特定のケースでは、あなたは、Android 2.3でクラッシュを見ていない可能性が高いですので、 AsyncTask.execute()はAPI 11(Android 3.0)およびjmethodIDがnullになるまで利用できませんでした。 (jclassとjmethodIDを取得した後で常にnullを確認することをお勧めします)

+0

私は 'long 'で' jlong​​'のスペルが間違っていたので、同じエラーが発生しました – ZdaR

2

このエラーは、誤ったパラメータタイプのメソッドを呼び出すと発生します。

さらに、この場合、ネイティブコードと異なるJavaコードでネイティブメソッドを登録することができます。違いは、Javaコードとネイティブコードの間でより多くのパラメータまたはより少ないパラメータを宣言することができます。私は[開発者のためのGoogleのリリース声明]に読んで覚えて

1
+0

@Crossle ... androidと同じ問題に直面して同じ問題に直面していますhttp://stackoverflow.com/questions/21423036/sqlite3- exception-database-disk-image-is-malformed plsはあなたのコードを実装する方法を教えています..私は過去3週間から整流しています: – Gattsu

関連する問題