[英]JNI Error accessed stale weak global reference
我正在尝试从JNI层调用NfcAdapter.setNdefPushMessageCallback。 您必须知道,相同的签名是setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)
我已经考虑了所有这些建议。 我怀疑它一定与第二个有关。
这是我的代码:
jmethodID methodId = (*env)->GetMethodID(
env, cls, "setNdefPushMessageCallback",
"(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V");
(*env)->CallVoidMethod(env, g_adapter, methodId, g_nfcCallback, g_activity);
代替[Landroid / app / Activity; (va_list),我没有提出任何其他论点。
如果是Java,则完全可以接受:
NfcAdapter.setNdefPushMessageCallback(callback, activity);
请给我建议解决方案
此方法签名至少需要一个Activity作为参数。
如果您没有为最后一个activities
参数提供任何信息,Java将自动创建一个新的空数组。
不幸的是,JNI层不会自动执行该操作,并且如果接收到空参数( 此处为foreach循环 ),则相应的代码将崩溃。
因此,您需要将一个空数组传递给方法调用:
jobjectArray empty = (jobjectArray) (*env)->NewObjectArray(env, 0, (*env)->FindClass(env, "Landroid/app/Activity;"), NULL);
(*env)->CallVoidMethod(env, g_adapter, methodId, g_nfcCallback, g_activity, empty);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.