Ошибка: JNI ERROR (ошибка приложения): доступ к устаревшей глобальной ссылке

Я получаю эту ошибку JNI ERROR (ошибка приложения): доступ к устаревшей глобальной ссылке Когда я запускаю свое приложение в ОС Android v4, но когда я запускаю то же приложение в Android версии 2.3, я не получаю эту ошибку.

Эта ошибка возникает в точке, где я вызываю класс AsyncTask, где я передаю строковый массив в качестве аргумента

Может ли кто-нибудь мне помочь?

Ответы

Ответ 1

Эта ошибка возникает, когда вы вызываете метод с неправильным типом параметра.

Убедитесь, что ваша подпись метода совпадает с тем, что вы передаете. Для массива строк:

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 после их получения)

Ответ 2

Эта ошибка возникает, когда вы вызываете метод с неправильным типом параметра.

Дополнение, в этом случае вы можете зарегистрировать собственный метод на Java-коде, отличный от собственного кода. Разница может заключаться в том, что вы указываете более или менее параметры между кодом Java и собственным кодом.