JNI GetMethodID中android View方法上的NoSuchMethodError



我正试图通过安卓类Android.view.view上的JNI获得一些方法ID。我设法通过JNI获得了很多其他方法,但这个方法以及我试图获得的另一个方法(setLayoutParams(在Android.vview.view中实现,但JNI找不到。这是我使用的代码,最后我得到的日志说找不到方法。然后还会出现noSuchMethodError异常。

jint JNI_OnLoad(JavaVM *vm, void *reserved) {
JNIEnv *env;
int status;
status = (*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_4);
if (status < 0) {
status = (*vm)->AttachCurrentThread(vm, (void **) &env, NULL);
if (status < 0) { return -1; }
}
jclass cView = (*env)->FindClass(env, "android/view/View");
if (cView == NULL) {
__android_log_write(ANDROID_LOG_DEBUG, "JNI", "can not find the class View ");
return -1;
}
jmethodID mSetOnClickListener = (*env)->GetMethodID(env, cView, "setOnClickListener", "(Landroid/view/View/OnClickListener;)V");
if (mSetOnClickListener == NULL) {
__android_log_write(ANDROID_LOG_DEBUG, "JNI", "can not find the method setOnClickListener");
return -1;
}
return 0;
}

这与View类有关吗?我怎样才能得到这种方法?

类名必须使用$符号分隔。示例:android/view/View$OnClickListener

我想你会因为格式错误而变为null。

固定mSetOnClickListener声明:

jmethodID mSetOnClickListener = (*env)->GetMethodID(env, cView, "setOnClickListener", "(Landroid/view/View$OnClickListener;)V"); 

setLayoutParams也是如此,因为它接受内部类ViewGroup.LayoutParams实例作为参数。

最新更新