使用CallNonvirtualVoidMethod传递参数

时间:2014-09-13 04:26:55

标签: android-ndk java-native-interface

我有一个JNI函数在Android活动中调用实例方法。我正在使用CallNonvirtualVoidMethod。像这样:

jarray buffer = (*env)->NewByteArray(env, len);
void* pBuffer = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL);
// ... load data to buffer via pBuffer
(*env)->ReleasePrimitiveArrayCritical(env, buffer, pBuffer, 0);
(*env)->CallNonvirtualVoidMethod(env, o, c, m); // associate m with java method name 'mMethod' somewhere
(*env)->DeleteLocalRef(env, buffer);

如果没有参数传递(比如'm'之后没有任何参数),一切正常。但是如果有参数(甚至只有一个整数,如:(* env) - > CallNonvirtualVoidMethod(env,o,c,m,msg);),活动似乎没有正确接收它们(但我确信它被调用) 。像这样:

public void mMethod(int msg) {
    Log.i("aaa", "I am here"); <----------------successfully printed in logcat
    Log.i("aaa", "I hate: " + msg);<------------not got printed
}

我正在使用ndk-r8-crystax。有人可以帮帮我吗?感谢。

1 个答案:

答案 0 :(得分:-2)

当我打电话给另一个课而不是任何活动时,问题就消失了。猜测原因是一个活动无法与原语/引用作为参数进行通信。