如何将数组从 JNI 返回到 Java?
2022-08-31 08:00:28
我正在尝试使用机器人NDK。
有没有办法将JNI中创建的数组(在我的例子中是)返回到Java?如果是这样,请提供一个可以执行此操作的 JNI 函数的快速示例。int[]
-谢谢
我正在尝试使用机器人NDK。
有没有办法将JNI中创建的数组(在我的例子中是)返回到Java?如果是这样,请提供一个可以执行此操作的 JNI 函数的快速示例。int[]
-谢谢
如果您已经检查了文档,但仍有问题,则应成为初始问题的一部分。在本例中,示例中的 JNI 函数会创建许多数组。外部数组由使用 JNI 函数创建的“对象”数组组成。从 JNI 的角度来看,这就是二维数组的全部内容,一个包含许多其他内部数组的对象数组。NewObjectArray()
下面的 for 循环使用 JNI 函数创建 int[] 类型的内部数组。如果您只想返回一维整数数组,那么该函数就是您用于创建返回值的函数。如果要创建 String 的单维数组,则可以使用该函数,但为该类使用不同的参数。NewIntArray()
NewIntArray()
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[size];
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