2011-05-12 52 views
25

我有一个像{"myname","yourname","hisname"}字符串数组,我试图发送此数组C与使用JNI。我找不到任何明确的解决方案。我试图把这个字符串作为chararray,但没有成功。传递字符串数组从Java到C与JNI

有没有办法做到这一点?

回答

68

您可以编写一个简单的函数,该函数需要一个jobjectArray对象,将每个对象转换为jstring,然后调用GetStringUTFChars

像这样:

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. 
    } 
} 
9

是的,有一种方法。您将从Java端将String[]传递到您的本地方法中,并将以jobjectArray的形式传递到C/C++端。然后,您将使用GetObjectArrayElement()在给定索引处获得jstring,然后使用GetStringUTFChars()GetStringChars()获取指向底层字符串数据的C/C++指针。

如果您不知道,JNI Book是一个有价值的参考。

+1

THX以供参考。我读过它。我解决了将字符串发送到C端的问题。我尝试发送阵列练习并取得成功。 Thx寻求帮助。有两个正确的答案,如果你不介意,我想给代表8ball ... – Aykut 2011-06-13 10:42:39

+2

“JNI书”的链接已损坏。 – 2016-12-20 09:20:18

1

它可以在以下方式进行:

(JNIEnv *env, jobject object, jobjectArray prdctini) 
    { 
     const char *param[20]; 
     jsize stringCount = (*env).GetArrayLength(prdctini); 

      for (int i=0; i<stringCount; i++) { 
        jstring string = (jstring) (*env).GetObjectArrayElement(prdctini, i); 
        param[i] = (*env).GetStringUTFChars(string, NULL); 
      } 
      cout<<"U_Id="<<param[0]<<endl; 
      cout<<"aggregation="<<param[1]<<endl 
} 
+4

'ReleaseStringUTFChars'如何? – 2014-07-10 10:01:40

0

记住使用

env->GetArrayLength(stringArray); 
相关问题