J'essaye d'utiliser le NDK android.
Existe-t-il un moyen de renvoyer un tableau (dans mon cas, un int[]
) créé dans JNI vers Java? Si tel est le cas, veuillez fournir un exemple rapide de la fonction JNI qui ferait cela.
-Merci
la source
J'essaye d'utiliser le NDK android.
Existe-t-il un moyen de renvoyer un tableau (dans mon cas, un int[]
) créé dans JNI vers Java? Si tel est le cas, veuillez fournir un exemple rapide de la fonction JNI qui ferait cela.
-Merci
Si vous avez examiné la documentation et que vous avez encore des questions qui devraient faire partie de votre question initiale. Dans ce cas, la fonction JNI de l'exemple crée un certain nombre de tableaux. Le tableau externe est composé d'un tableau «Object» créé avec la fonction JNI NewObjectArray()
. Du point de vue de JNI, c'est tout un tableau à deux dimensions, un tableau d'objets contenant un certain nombre d'autres tableaux internes.
La boucle for suivante crée les tableaux internes qui sont de type int [] en utilisant la fonction JNI NewIntArray()
. Si vous vouliez simplement renvoyer un tableau unidimensionnel d'entiers, la NewIntArray()
fonction est celle que vous utiliseriez pour créer la valeur de retour. Si vous vouliez créer un tableau unidimensionnel de chaînes, vous utiliseriez la NewObjectArray()
fonction mais avec un paramètre différent pour la classe.
Puisque vous souhaitez renvoyer un tableau int, votre code ressemblera à ceci:
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 quelqu'un souhaite savoir comment renvoyer le tableau String []:
code java
exportation native
code natif
à partir du lien: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java
la source
Sur la base de la question posée, cela est déjà expliqué dans la première réponse: comment pouvons-nous passer int [] via jobjectArray. Mais voici un exemple comment nous pouvons renvoyer un jobjectArray qui contient des listes de données. Cela peut être utile dans des situations par exemple: lorsque quelqu'un a besoin de renvoyer des données au format 2D pour dessiner une ligne avec des points x et y. L'exemple ci-dessous montre comment un jobjectArray peut renvoyer des données au format suivant:
Entrée Java dans le JNI:
Tableau [
Arraylist
de x points flottants] [Arraylist
de y points flottants]Sortie JNI vers java:
jobjectArray
[Arraylist
de x points flottants] [Arraylist
de y points flottants]la source
Une solution simple consiste à écrire les données du tableau dans un fichier à partir de C, puis à accéder au fichier à partir de Java
la source