错误:JNI错误(应用程序错误):访问陈旧的全球参考错误、陈旧、应用程序、全球

2023-09-04 06:37:13 作者:我的心是水晶做的

我收到此错误 JNI错误(应用程序错误):访问过时的全球参考:当我运行我的Andr​​oid操作系统v4的应用程序,但是当我运行的Andr​​oid V2.3同一个应用程序我没有得到这个错误

发生在那里我打电话的AsyncTask类,在这里我传递一个字符串数组作为参数的点此错误的

任何人都可以帮我吗?

解决方案

当你调用一个不正确的参数类型的方法,会出现此错误。

请确保你的方法签名匹配正是你正在传递。对于一个字符串数组:

  jmethodID中期= ENV->的GetMethodID(CLS,方法名,([Ljava /朗/字符串;)V);
 
魔兽世界登陆时错误怎么解决

如果你自己创建它,它看起来是这样的:

  JCLASS stringCls = ENV->的findClass(爪哇/郎/字符串);
jobjectArray mStringArray = ENV-> NewObjectArray(MSIZE,stringCls,NULL);
 

在特定的情况下,你最有可能没有看到飞机坠毁在Android 2.3,因为您呼叫AsyncTask.execute(),它是不可用,直到11 API(安卓3.0)和您jmethodID为空。 (这是一个好主意,让他们以后经常检查JCLASS和jmethodID为空)

I am getting this error JNI ERROR (app bug): accessed stale global reference When I run my app in Android OS v4, But when I run the same application in Android v2.3 I don't get this error.

This error occurs at the point where I call AsyncTask class, where I pass a string array as argument

Could Anyone Help me??

解决方案

This error occurs when you call a method with an incorrect parameter type.

Make sure your method signature matches exactly what you are passing. For a string array:

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

If you are creating it yourself, it would look something like this:

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

In your specific case, you are most likely not seeing the crash on Android 2.3 because you are calling AsyncTask.execute() which wasn't available until API 11 (Android 3.0) and your jmethodID is null. (It's a good idea to always check jclass and jmethodID for null after getting them)