[英]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.