如何将数组从JNI返回到Java?

Rya*_*heu 120 java arrays java-native-interface android

我正在尝试使用android NDK.

有没有办法将int[]在JNI中创建的数组(在我的情况下是一个)返回给Java?如果是这样,请提供一个JNI函数的快速示例.

-谢谢

Jhe*_*ico 111

如果您已经检查了文档,但仍然有问题应该是您的初始问题的一部分.在这种情况下,示例中的JNI函数会创建许多数组.外部数组由使用JNI函数创建的"Object"数组组成NewObjectArray().从JNI的角度来看,这是一个二维数组,是一个包含许多其他内部数组的对象数组.

以下for循环使用JNI函数创建int []类型的内部数组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;
}
Run Code Online (Sandbox Code Playgroud)

  • EDIT2:代码有效,但您必须在SetIntArrayRegion(...)中更改tmp才能填充. (3认同)

zaj*_*.m2 36

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

java代码

private native String[] data();
Run Code Online (Sandbox Code Playgroud)

本地出口

JNIEXPORT jobjectArray JNICALL Java_example_data() (JNIEnv *, jobject);
Run Code Online (Sandbox Code Playgroud)

本机代码

  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);  
  }  
Run Code Online (Sandbox Code Playgroud)

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