android jni上的GetMethodID失败

时间:2013-08-01 16:45:44

标签: android callback java-native-interface

我正在尝试在JNI / NDK中实现回调函数。 我在GetMethodID函数中遇到错误

我想在Java(来自C)中执行具有以下签名的函数:

[java code]

public int callback(String msg) {
    cb_tv.setText(msg);
    return 1;
}

[原生C代码]

JNIEXPORT void JNICALL Java_com_example_hellojni1_nativeJava_testDirectCallback(JNIEnv *env, jclass obj) {
    static jmethodID cb = NULL;
    jclass cls = (*env)->GetObjectClass(env, obj);

    if(cb == NULL)  {
        cb = (*env)->GetMethodID(env, cls, "callback", "(Ljava/lang/String;)I");
    if(cb == NULL) return;
    }
    (*env)->CallVoidMethod(env, obj, cb, (*env)->NewStringUTF(env, "[C->J] callback"));

    return;
}

我收到以下错误:

08-01 16:26:43.617: W/dalvikvm(516): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-01 16:26:43.637: E/AndroidRuntime(516): FATAL EXCEPTION: main
08-01 16:26:43.637: E/AndroidRuntime(516): java.lang.NoSuchMethodError: callback

我不明白这个错误。 有没有人可以帮助我? 提前谢谢

1 个答案:

答案 0 :(得分:4)

像fadden一样提到......

检查您的Java_com_example_hellojni1_nativeJava_testDirectCallback是否已声明为“native”而不是“static native”。

这是我的问题。