Как отредактировать jobjectArray в JNI и передать его обратно в Java - PullRequest
0 голосов
/ 13 января 2020

Я знаю, что, возможно, были опубликованы похожие темы, но я не могу приспособить их к своей проблеме.

Я выполняю некоторые операции, используя массив double[][] circlesOnScreen в Java. Я хочу передать этот массив в JNI и отредактировать его там.

В JNI:

extern "C" JNIEXPORT void JNICALL
Java_com_example_nativeapp_MainActivity_method(JNIEnv *env, jobject , jobjectArray circlesOnScreen){

    ...

    for(size_t i = 0; i < circles.size(); i++){

        Vec3i c = circles[i];

        // after a lot of effort I know how to access elements of the array
        jdoubleArray oldCircle = (jdoubleArray) (env->GetObjectArrayElement(circlesOnScreen, i));
        jboolean isCopy;
        jdouble *elem = (env->GetDoubleArrayElements(oldCircle, &isCopy));

        double oldX = elem[0];
        double oldY = elem[1];
        double oldRadius = elem[2];
        double newX = c[0];
        double newY = c[1];
        double newRadius = c[2];

        if ((newX > oldX + 5.0 || newX < oldX - 5.0) &&
                (newY > oldY + 5.0 || newY < oldX - 5.0)){
            elem[0] = newX;                                         // here I edit them
            elem[1] = newY;
            elem[2] = newRadius;
        }

        // now what should I do to "save" changes made to elem and circlesOnScreen?
    }
}
...