gpt4 book ai didi

java - 正确的 JNI 转换从 jobjectarray 获取数组项到单独的 const char

转载 作者:行者123 更新时间:2023-11-30 03:36:20 31 4
gpt4 key购买 nike

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

我正在尝试通过 JNI 桥将 String[] 数组从 Java 传递到 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com