[英]How to pass array to java method from jni
I am trying to pass a int array
from JNI to Java
. 我正在尝试从
JNI to Java
传递一个int array
JNI to Java
。 When I pass single or multiple
int
value, it works
but passing array
is not working. 当我传递
single or multiple
int
值时, it works
但是传递array
不起作用。 Every time app crash and return the following error 每次应用程序崩溃并返回以下错误
Invalid indirect reference 0x48609264 in decodeIndirectRef
Fatal signal 11 (SIGSEGV) at 0xdeadd00d....
jclass dataClass = env->FindClass("com/mypkg/project/DemoNative");
javaClassRef = (jclass) env->NewGlobalRef(dataClass);
javaMethodRef = env->GetMethodID(javaClassRef, "onDataReady", "([II)V");
jobject javaObjectRef = env->NewObject(javaClassRef, javaMethodRef);
jint array[2] = {1};
jintArray result;
result = env->NewIntArray(2);
env->SetIntArrayRegion(result,0,2,array);
env->CallVoidMethod(javaObjectRef, javaMethodRef,result,2);
public void onDataReady(int[] array,int len){
}
The line 线
jobject javaObjectRef = env->NewObject(javaClassRef, javaMethodRef);
is definitely wrong. 肯定是错的。 It tries to use the method ID for onDataReady() as a constructor.
它尝试将onIDReady()的方法ID用作构造函数。
You probably need 你可能需要
jmethodID javaDefaultConstructor = env->GetMethodID(javaClassRef, "<init>", "()V");
jobject javaObjectRef = env->NewObject(javaClassRef, javaDefaultConstructor);
Note that jmethodID is not a reference: you can find the ID once and use it from any thread and on any instance you like. 请注意,jmethodID不是参考:您可以找到该ID一次,并可以在任何线程和您喜欢的任何实例上使用它。 It's just a number, constant at least for the lifetime of your application.
这只是一个数字,至少在您的应用程序生命周期内是恒定的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.