2016-11-15 19 views
0

JNIを使​​用して、2つの文字列配列を受け取り、1つの文字列配列に連結して大きな文字列配列を返すC++ネイティブ関数を実装します。 実際には、THISを文字列配列に拡張します。 次のコードを完成させるにはどうすればよいですか?JNI C++ネイティブ関数で2つの文字列配列を連結する方法

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; 
} 

Iは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

関連する問題