错误:JNI 错误(应用程序错误):访问过时的全局引用 [英] Error: JNI ERROR (app bug): accessed stale global reference

查看:23
本文介绍了错误:JNI 错误(应用程序错误):访问过时的全局引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到此错误JNI 错误(应用程序错误):访问过时的全局引用当我在 Android OS v4 中运行我的应用程序时,但是当我在 Android v2.3 中运行相同的应用程序时,我没有收到此错误.>

这个错误发生在我调用 AsyncTask 类的地方,我将一个字符串数组作为参数传递

有人可以帮我吗??

解决方案

当您使用不正确的参数类型调用方法时,会发生此错误.

确保您的方法签名与您传递的内容完全匹配.对于字符串数组:

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 后总是检查它们是否为 null 是个好主意)

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)

这篇关于错误:JNI 错误(应用程序错误):访问过时的全局引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆