我试图使用Android NDK。如何将数组从JNI返回给Java?
有没有办法返回一个数组(在我的情况的int[]
)在JNI创建的Java?如果是这样,请提供一个JNI函数的简单例子。
-Thanks
我试图使用Android NDK。如何将数组从JNI返回给Java?
有没有办法返回一个数组(在我的情况的int[]
)在JNI创建的Java?如果是这样,请提供一个JNI函数的简单例子。
-Thanks
如果你检查的文件,仍然有应该是你最初的问题的一部分问题。在这种情况下,示例中的JNI函数创建了一些数组。外阵列由一个“物件”阵列用JNI函数NewObjectArray()
创建的。从JNI的角度来看,这是一个二维数组,它是一个包含许多其他内部数组的对象数组。
下面的for循环创建内阵列它们是int类型使用JNI函数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
是啊,我这样做了。我在理解与我的问题(最后一个)有关的例子时遇到了困难,我想知道是否有人会介绍一个简单的例子,只返回一个int []。 – RyanCheu 2009-10-22 21:30:07
编辑:请忽略我以前的评论,上面的代码确实有效。 谢谢!这非常有帮助。 – RyanCheu 2009-10-23 21:23:46
EDIT2:代码有效,但你必须在SetIntArrayRegion(...)中更改tmp来填充。 – RyanCheu 2009-10-23 21:25:08