我正在將薑餅代碼移植到ICS。 C和Java之間的通信在薑餅中恰當地發生。但同樣的事情在ICS中崩潰。無法弄清楚。JNI getmethodID只在ICS中返回NULL,但在Gingerbread中不返回
ICS jni的主要變化是什麼?
我現在的問題,
1.Get類實例,並將其轉化爲全球性的參考和存儲。
jclass myWrapperClass = (*env)->FindClass(env,"com/test/mypackage/Wrapper");
if (voipWrapperClass == NULL) {
// error - handling and returns
}
WrapperClass = (jclass)(*env)->NewGlobalRef(env,myWrapperClass);
2.從JNI調用流程進入堆棧下面並將回調函數返回給jni。從JNI到java下面函數調用
void response(void* ptr, int result){
JNIEnv *envPtr= NULL;
JavaVM* vmPtr= p_pdb->vm;
if ((*vmPtr)->GetEnv(vmPtr,(void**) &envPtr, JNI_VERSION_1_4) == JNI_EDETACHED) {
(*vmPtr)->AttachCurrentThread(vmPtr,(void**)&envPtr,NULL);
}
if (ptr->WrapperClass == NULL) {
// error- handling and return
}
RespMethodId = (*envPtr)->GetMethodID(envPtr,ptr->WrapperClass, "resp","(Z)V");
// this method is always 0 ... prev for gingerbread it returned a valid id..
}
請給我一個解決方法如何進一步進行。
我可以看到錯誤的一件事是'WrapperClass =(jclass)(* env) - > NewGlobalRef(env,WrapperClass); '。不應該是NewGlobalRef(myWrapperClass)而是 – jogabonito 2012-03-21 08:40:27
可能重複[ICS - JNI getmethodID返回NULL](http://stackoverflow.com/questions/9772645/ics-jni-getmethodid-returns-null) – EJP 2012-03-21 08:59:25
@jogabonito雅對不起。我改變了太..但仍然返回0 ... – Indhu 2012-03-21 09:25:28