2016-11-15 6 views
0

Я собираюсь использовать JNI для реализации родной функции C++, которая получает два строковых массива, объединяет их в один массив строк и возвращает большой массив строк. На самом деле, я собираюсь расширить THIS до строковых массивов. Как я могу заполнить следующие коды?JNI Как объединить два строковых массива в C++ native function

Java код сторона:

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

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

Native код на стороне:

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

Если вы абсолютно необходимо, она может идти, как это:

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. Это не будет заметно медленнее, но гораздо легче читать и понимать.

+0

Спасибо Seva, он работает идеально. В моем коде я заменил «jarray» на «jobjectArray». – gnoejh

Смежные вопросы