Привет ! Меня зовут Ксавье Жувено, и в этом небольшом посте я объясню, как преобразовать Java jintArray в C++ std::vector.

Самореклама. Другие статьи по Android-разработке вы можете найти на моем сайте 😉

Решение

Для людей, которым нужно только решение, чтобы быстро скопировать и вставить его в код, вот оно 😉

extern "C" JNIEXPORT jstring JNICALL Java_com_example_project_class_method(JNIEnv *env, jobject /* this */, jintArray arr) {
  jsize size = env->GetArrayLength( arr );
  std::vector input( size );
  env->GetIntArrayRegion( arr, jsize{0}, size, &input[0] );
}

Объяснение

Если вы читаете это, возможно, вы хотите понять, как предыдущее решение достигает цели преобразования jintArray в std::vector<jint>, и это то, что я попытаюсь объяснить. 🙂

Прежде всего, мы получаем размер jintArray с помощью метода JNIEnv GetArrayLength и сохраняем эту информацию в переменной.

Затем, используя эту информацию, мы можем создать std::vector нужного размера.

И, наконец, мы копируем элементы из jintArray в std::vector, используя метод JNIEnv GetIntArrayRegion, предоставляя ему всю необходимую информацию: jintArray, индекс, с которого следует начать копирование, размер массива и местоположение куда копировать массив.

Спасибо всем за прочтение этой статьи, и до моей следующей статьи, хорошего дня 😉

Интересные ссылки

Первоначально опубликовано на http://10xlearner.com 8 мая 2020 г.