无法从android中的本机函数调用void java成员函数

时间:2011-07-28 08:39:18

标签: android callback android-ndk

我在android-ndk中遇到问题。当我尝试从cpp调用java nan-static成员函数时,我也没有收到任何运行时错误,但函数没有被调用。
但是当我尝试从cpp调用java静态成员函数时,我能够成功调用,成员函数定义将成功执行。

/********** For static member function */
/* This is the c code */ 

jmethodID method = env->GetStaticMethodID(interfaceClass, "callBack", "(Ljava/lang/String;)V");
if(!method) {
    LOGE("Callback_handler: Failed to get the callback method");
    return;
}
env->CallStaticVoidMethod(interfaceClass, method, js);

/* This is the function in the java */
    public static void callBack(String s) {
    Bundle b = new Bundle();
    b.putString("callback_string", s);
    Message m = Message.obtain();
    m.setData(b);
    //Sending to the handler
    h.sendMessage(m);
}

上面的代码效果很好,但下面的代码无效

/********** For member function */
/* This is the c code */ 
jmethodID method = env->GetMethodID(interfaceClass, "callBack", "(Ljava/lang/String;)V");
LOGE("callback_handler: method %d", method);
if(!method) {
    LOGE("Callback_handler: Failed to get the callback method");
    return;
}


/* Call the callback function */
env->CallVoidMethod(interfaceClass, method, js);

/* This is the function in the java */
    public void callBack(String s) {
    Bundle b = new Bundle();
    b.putString("callback_string", s);
    Message m = Message.obtain();
    m.setData(b);
    //Sending to the handler
    h.sendMessage(m);
}   

如果我错过了什么,请告诉我。

谢谢&问候,
SSuman185

1 个答案:

答案 0 :(得分:0)

在调用成员函数期间,不要将类实例用作类参数。使用类的实例作为cls参数。那么我们也可以调用成员函数。

Selvin给出了答案,它工作正常,但他没有回答,而是添加了评论。所以,我正在更新答案。请把它归功于他。

谢谢&问候,
SSuman185