Search code examples
androidc++parameterscallbackjava-native-interface

How to call from jni java library with 2 string parameters?


I tried like this:

 void CallbackStringFromJni(const char *name, const char *type)
 {
    jboolean isAttached;
    JNIEnv *env;
    jmethodID mid;
    jstring js, js2;
    LOGE("callbackStringFromJni Begin");
    env = getJniEnv(&isAttached);
    if (env == NULL)
            goto FAIL0;

    mid = getApplicationJniMethodId(env, applicationJniObj, "callbackStringFromJni", "(SS)V");
    if (mid == NULL)
            goto FAIL1;

    js = (*env)->NewStringUTF(env, name);
    js2 = (*env)->NewStringUTF(env, type);
    (*env)->CallVoidMethod(env, applicationJniObj, mid, js, js2);

    if (isAttached)
    {
        (*global_vm)->DetachCurrentThread(global_vm);
    }
    LOGE("callbackStringFromJni End");
    return;
FAIL1:
    if (isAttached)
    {
        (*global_vm)->DetachCurrentThread(global_vm);
    }
FAIL0:
    LOGE("callbackStringFromJni FAILED");
    return;
}

But I get this back:

01-26 11:53:02.500: E/VidyoMobile app/src/main/jni/ndkVidyoSample.c(31091): getApplicationJniMethodId - getApplicationJniMethodId: Failed to get callbackStringFromJni method
01-26 11:53:02.603: E/AndroidRuntime(31091): java.lang.NoSuchMethodError: no non-static method "Lcom/vidyo/vidyocore/VidyoCoreApplication;.callbackStringFromJni(SS)V"

My method in java looks like:

public void callbackStringFromJni(String name, String typeS) {
    Log.e("","callbackStringFromJni name: " + name + ".. type: " + typeS);
}

Solution

  • It has to be like this:

    mid = getApplicationJniMethodId(env, applicationJniObj, "callbackStringFromJni", "(Ljava/lang/String;Ljava/lang/String;)V");
    

    not

    "(SS)V"