Я пытаюсь использовать Android NDK.
Есть ли способ вернуть массив (в моем случае int[]
), созданный в JNI, в Java? Если да, приведите краткий пример функции JNI, которая могла бы это сделать.
-Спасибо
источник
Я пытаюсь использовать Android NDK.
Есть ли способ вернуть массив (в моем случае int[]
), созданный в JNI, в Java? Если да, приведите краткий пример функции JNI, которая могла бы это сделать.
-Спасибо
Если вы изучили документацию и остались вопросы, которые должны быть частью вашего первоначального вопроса. В этом случае функция JNI в примере создает несколько массивов. Внешний массив состоит из массива Object, созданного с помощью функции 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
собственный экспорт
собственный код
по ссылке: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java
источник
Основываясь на заданном вопросе, в первом ответе уже объясняется, как мы можем передать int [] через jobjectArray. Но вот пример того, как мы можем вернуть jobjectArray, который содержит списки данных. Это может быть полезно, например, в ситуациях: когда кому-то нужно вернуть данные в 2D-формате, чтобы нарисовать линию с точками x и y. В приведенном ниже примере показано, как jobjectArray может возвращать данные в виде следующего формата:
Ввод Java в JNI:
массив [
Arraylist
из x точек с плавающей запятой] [Arraylist
из y точек с плавающей запятой]Вывод JNI в java:
jobjectArray
[Arraylist
из x точек с плавающей запятой] [Arraylist
из y точек с плавающей запятой]источник
Простое решение - записать данные массива в файл из C, а затем получить доступ к файлу из Java.
источник