GetFloatArrayElements 得到错误的结果

GetFloatArrayElements get wrong result

我已经从互联网上搜索了解决方案,我的代码看起来与其他解决方案相同。我认为 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]

我已经从调试中检查了调用代码。这是示例值:

你的Java_draw方法的签名是错误的:(source)

  • 第一个参数始终是 JNIEnv*
  • 第二个参数取决于方法是静态的还是non-static:
    • 如果是静态的,第二个参数是 jclass.
    • 如果non-static,第二个参数是一个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