请原谅我,因为我是C++ jni环境的新手

我正在尝试通过Java在JNI桥中将String []数组传递给c++,同时遵循在这里给出的代码段提示:

void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {

    int stringCount = env->GetArrayLength(stringArray);

    for (int i=0; i<stringCount; i++) {
        jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
        const char *rawString = env->GetStringUTFChars(string, 0);
        // Don't forget to call `ReleaseStringUTFChars` when you're done.
    }
}

我已经在代码中以多种方式尝试过此操作,但是由于logcat和应用停止运行,仍然出现“无法修复的错误”错误。请查看我的代码和帮助。提前非常感谢您。

我的代码:
JNIEXPORT void Java_ran_com_FirstActivity_Example(
        JNIEnv *javaEnvironment, jobject self, jobjectArray stringArray, jlongArray params) {
    // Convert the input jlong array to a regular int array.
    jlong *longParams = javaEnvironment->GetLongArrayElements(params, JNI_FALSE);
    int arr[6];
    for (int n = 0; n < 6; n++) arr[n] = longParams[n];
    javaEnvironment->ReleaseLongArrayElements(params, longParams, JNI_ABORT);


    int stringCount = javaEnvironment->GetArrayLength(stringArray);

    for (int i=0; i<stringCount; i++) {
        jstring string = (jstring) (javaEnvironment->GetObjectArrayElement(stringArray, 2));
        const char *rawString = javaEnvironment->GetStringUTFChars(string, 0);
        // a method I created
        example = new Example(rawString, arr);
        javaEnvironment->ReleaseStringUTFChars(string, rawString);
    }

}

最佳答案

int stringCount = javaEnvironment->GetArrayLength(stringArray);

for (int i=0; i<stringCount; i++) {
    jstring string = (jstring) (javaEnvironment->GetObjectArrayElement(stringArray, 2));

您可能确实打算调用以下行来枚举stringArray中的所有字符串。
    jstring string = (jstring)(javaEnvironment->GetObjectArrayElement(stringArray, i);
    //i, not 2

关于java - 正确的JNI转换将数组项从jobjectarray分离到单独的const char,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40781387/

10-13 03:27