如何从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