2014-09-13 46 views
0

我有一个JNI函数调用Android活动中的实例方法。我正在使用CallNonvirtualVoidMethod。像这样:通过使用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。任何人都可以帮助我?谢谢。

回答

-2

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