JNI如何在C ++本机函数中连接两个字符串数组

时间:2016-11-15 02:51:15

标签: android-ndk java-native-interface

我将使用JNI实现接收两个字符串数组的C ++本机函数,将它们连接成一个字符串数组,并返回大字符串数组。 实际上,我将THIS扩展到字符串数组。 如何填写以下代码?

Java端代码:

String [] strarrayA={"abc", "def"}, strarrayB = {"123","456"};
String[] strarrayC = strarrayFromJNI(strarrayA, strarrayB);

public native String[] strarrayFromJNI(String[] first, String[] second);

原生代码:

jarray
Java_com_androidMexample_MainActivity_strarrayFromJNI(
    JNIEnv *env, jobject /* this */, jarray a, jarray b){

    jsize alen = env->GetArrayLength(a);
    jsize blen = env->GetArrayLength(b);

    ...
    (How can I concatenate a and b to obtain c, result <- a, b ?)

    return c;
}

如何使用strarrayC = {“abc”,“def”,“123”,“456”}获取返回的字符串数组?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果你绝对必须,可以这样:

jobjectArray ab = env->NewObjectArray(alen+blen, env->FindClass("java/lang/String"), 0);
jsize i;
for(i=0;i<alen;i++)
    env->SetObjectArrayElement(ab, i, env->GetObjectArrayElement(a, i));
for(i=0;i<blen;i++)
    env->SetObjectArrayElement(ab, alen+i, env->GetObjectArrayElement(b, i));

但你可以在Java中做同样的事情。它不会明显变慢,但更容易阅读和理解。