私は現在、GingerbreadコードをICSに移植しています。 CとJavaの間の通信はGingerbreadで適切に行われます。しかし、ICSでも同じことが起こります。把握することはできません。JNI getmethodIDは、ICSのみで、ジンジャーブレッドではNULLを返します。
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
[ICS-JNI getmethodIDがNULLを返す]の可能な複製(http://stackoverflow.com/questions/9772645/ics-jni-getmethodid-returns-null) – EJP
@jogabonito ya sorry ..私もtを変えました..でもそれでも0を返します... – Indhu