如何从JNI返回一个数组到Java?

我正在尝试使用Android NDK。

有没有办法将JNI中创build的数组(在我的情况下,一个int[] )返回给Java? 如果是这样,请提供一个JNI函数的简单例子。

-谢谢

如果您已经查看了文档,仍然有问题应该成为您最初的问题的一部分。 在这种情况下,示例中的JNI函数创build了一些数组。 外部数组由一个用JNI函数NewObjectArray()创build的'Object'数组组成。 从JNI的angular度来看,这是一个二维数组,是一个包含许多其他内部数组的对象数组。

以下for循环使用JNI函数NewIntArray()创buildtypes为int []的内部数组。 如果你只是想返回一个int的单维数组,那么NewIntArray()函数就是你用来创build返回值的。 如果你想创build一个string的单维数组,那么你可以使用NewObjectArray()函数,但是为这个类使用不同的参数。

既然你想返回一个int数组,那么你的代码将如下所示:

 JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size) { jintArray result; result = (*env)->NewIntArray(env, size); if (result == NULL) { return NULL; /* out of memory error thrown */ } int i; // fill a temp structure to use to populate the java int array jint fill[256]; for (i = 0; i < size; i++) { fill[i] = 0; // put whatever logic you want to populate the values here. } // move from the temp structure to the java structure (*env)->SetIntArrayRegion(env, result, 0, size, fill); return result; } 

如果有人想知道如何返回String []数组:

java代码

 private native String[] data(); 

本地出口

 JNIEXPORT jobjectArray JNICALL Java_example_data() (JNIEnv *, jobject); 

本地代码

  JNIEXPORT jobjectArray JNICALL Java_example_data (JNIEnv *env, jobject jobj){ jobjectArray ret; int i; char *message[5]= {"first", "second", "third", "fourth", "fifth"}; ret= (jobjectArray)env->NewObjectArray(5, env->FindClass("java/lang/String"), env->NewStringUTF("")); for(i=0;i<5;i++) { env->SetObjectArrayElement( ret,i,env->NewStringUTF(message[i])); } return(ret); } 

从链接: http : //www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java