Ошибка: 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 и собственным кодом.
Ответ 3
Локальные изменения JNI в ICS