我正在将姜饼代码移植到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