我有一个像{"myname","yourname","hisname"}
这样的字符串数组,我正在尝试使用 JNI 将此数组发送到 C 。我找不到任何明确的解决方案。我试图把这个字符串作为chararray
,但没有成功。
有办法做到这一点吗?
答案 0 :(得分:80)
你可以编写一个简单的函数,它接受一个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.
}
}
答案 1 :(得分:9)
是的,有办法。您可以从Java端将String[]
传递给您的本机方法,这将作为jobjectArray
传递到C / C ++端。然后,您将使用GetObjectArrayElement()
在给定索引处获取jstring
,然后使用GetStringUTFChars()
或GetStringChars()
获取指向基础字符串数据的C / C ++指针。
如果您不知道,JNI Book是一个有价值的参考。
答案 2 :(得分: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
}
答案 3 :(得分:0)
请记住使用
env->GetArrayLength(stringArray);