GetFloatArrayElements получает неправильный результат

я искал решение в Интернете, и мой код выглядит так же, как и другое решение. Я думаю, что GetFloatArrayElements предназначен для получения элемента массива.

вот мой код:

JNIEXPORT void JNICALL
    Java_draw(JNIEnv *env, jfloatArray point){
        float temp[6];
        float x = 0;

        jfloat *body = env->GetFloatArrayElements(point, 0);

        for(int i =0; i < 6 ; i++){
            temp[i] = body[i];
            x+= body[i];
            __android_log_print(ANDROID_LOG_ERROR, "TRACKERS123", "[%f]", *(body + i) );
        }

        env->ReleaseFloatArrayElements(point, body, 0);
    }

результат всегда такой:

[21.774231]
[0.000000]
[21.707932]
[21.776413]
[0.000000]
[0.000000]

я проверил вызывающий код из отладки. вот пример значения:

GetFloatArrayElements получает неправильный результат

Как вы вызываете этот код из Java? Как выглядит объявление метода «draw»?

Botje 12.07.2019 08:56

Просто: рисовать (точка)

Angga Arya S 12.07.2019 09:04

Пустое рисование (точка с плавающей запятой)

Angga Arya S 12.07.2019 09:05

Подтверждает ли GetArrayLength, что ваш массив состоит из 6 элементов?

Botje 12.07.2019 09:12

Нет, только 1 элемент

Angga Arya S 12.07.2019 09:19

Тогда почему ты всегда читаешь шесть элементов? Все, что после первого, просто случайный мусор.

Botje 12.07.2019 09:20

Потому что я всегда передаю этому методу 6 элементов массива. Это гарантировано. Или любая идея?

Angga Arya S 12.07.2019 09:23

Вы только что сказали мне, что GetArrayLength возвращает 1. Как это возможно, если вы «всегда передаете 6 элементов»?

Botje 12.07.2019 09:25

Прости. показывает 1100999584. jsize x = env -> GetArrayLength (точка) ; __android_log_print(ANDROID_LOG_ERROR, "TRACKERS123", "размер %i", x);

Angga Arya S 12.07.2019 09:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
9
617
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подпись вашего метода Java_draw неверна: (источник)

  • Первый аргумент всегда JNIEnv*.
  • Второй аргумент зависит от того, является ли метод статическим или нестатическим:
    • Если статический, вторым аргументом является jclass.
    • Если не статический, второй аргумент — это jobject, представляющий экземпляр объекта.
  • Третий аргумент — ваш float[].

Итак, подпись должна быть:

JNIEXPORT void JNICALL Java_draw(JNIEnv *env, jclass klass, jfloatArray point) // static

или

JNIEXPORT void JNICALL Java_draw(JNIEnv *env, jobject obj, jfloatArray point) // non-static

Вау, спасибо. поэтому мы должны добавить JNIEnv и jclass. Я думал, мы просто добавим то, что нам нужно. и спецификация JNI меня смущает (docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/…)

Angga Arya S 12.07.2019 10:01

Этот бит был объяснен в разделе Аргументы собственного метода.

Botje 12.07.2019 10:04

Другие вопросы по теме