2012-08-22 37 views
14

我收到此錯誤 JNI錯誤(應用程序錯誤):訪問陳舊的全球參考當我運行我的Android操作系統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爲空時纔可用。 (在獲取它們之後始終檢查jclass和jmethodID爲空是個好主意)

+0

只是爲了將來的參考,我用'長'拼錯'jlong​​',導致相同的錯誤 – ZdaR

2

當您使用不正確的參數類型調用方法時,會發生此錯誤。

此外,在這種情況下,您可能會在與本機代碼不同的Java代碼上註冊本地方法。差異可以是你在Java代碼和本地代碼之間聲明更多或更少的參數。

1
+0

@Crossle ...隊友即時通訊新的android和麪臨同樣的問題http://stackoverflow.com/questions/21423036/sqlite3- exception-database-disk-image-is-malformed請告訴我如何實現你的代碼..即時通訊糾正它從最後3周:( – Gattsu