Estoy intentando usar el NDK de Android.
¿Hay alguna manera de devolver una matriz (en mi caso una int[]
) creada en JNI a Java? Si es así, proporcione un ejemplo rápido de la función JNI que haría esto.
-Gracias
fuente
Estoy intentando usar el NDK de Android.
¿Hay alguna manera de devolver una matriz (en mi caso una int[]
) creada en JNI a Java? Si es así, proporcione un ejemplo rápido de la función JNI que haría esto.
-Gracias
Si ha examinado la documentación y todavía tiene preguntas que deberían ser parte de su pregunta inicial. En este caso, la función JNI en el ejemplo crea una serie de matrices. La matriz externa se compone de una matriz 'Object' que se crea con la función JNI NewObjectArray()
. Desde la perspectiva de JNI, eso es todo una matriz bidimensional, una matriz de objetos que contiene una serie de otras matrices internas.
El siguiente bucle for crea las matrices internas que son de tipo int [] utilizando la función JNI NewIntArray()
. Si solo quisiera devolver una matriz dimensional única de entradas, entonces la NewIntArray()
función es la que usaría para crear el valor de retorno. Si quisiera crear una matriz tridimensional única de cadenas, utilizaría la NewObjectArray()
función pero con un parámetro diferente para la clase.
Como desea devolver una matriz int, su código se verá así:
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;
}
si alguien quisiera saber cómo devolver la matriz String []:
código java
exportación nativa
código nativo
desde el enlace: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java
fuente
Según la pregunta formulada, esto ya se explica en la primera respuesta de cómo podemos pasar int [] a través de jobjectArray. Pero aquí hay un ejemplo de cómo podemos devolver un jobjectArray que contiene listas de datos. Esto puede ser útil para situaciones, por ejemplo: cuando alguien necesita devolver datos en formato 2D para dibujar alguna línea con puntos x e y. El siguiente ejemplo muestra cómo un jobjectArray puede devolver datos en el siguiente formato:
Entrada de Java al JNI:
matriz [
Arraylist
de x puntos flotantes] [Arraylist
de puntos flotantes y]Salida JNI a Java:
jobjectArray
[Arraylist
de x puntos flotantes] [Arraylist
de y puntos flotantes]fuente
La solución simple es escribir los datos de la matriz en un archivo desde C y luego acceder al archivo desde Java
fuente