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