android开发分享如何从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

      以上就是android开发分享如何从JNI返回一个数组到Java?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520095.html

      (0)
      上一篇 2020年12月6日
      下一篇 2020年12月6日

      精彩推荐