J'ai un tableau de chaînes comme {"myname","yourname","hisname"}
et j'essaie d'envoyer ce tableau à C en utilisant JNI . Je n'ai pas pu trouver de solution claire à cela. J'ai essayé de prendre cette chaîne comme chararray
mais sans succès.
Y a-t-il un moyen de faire cela?
Vous pouvez écrire une fonction simple qui prend un objet jobjectArray
, transtyper chacun en jstring puis appeler GetStringUTFChars
dessus.
Comme ça:
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.
}
}
Oui, il existe un moyen. Vous passeriez le String[]
Dans votre méthode native du côté Java et cela se retrouverait du côté C/C++ sous la forme d'un jobjectArray
. Vous utilisez GetObjectArrayElement()
pour obtenir un jstring
à un index donné, puis utilisez GetStringUTFChars()
ou GetStringChars()
pour obtenir un pointeur C/C++ vers la chaîne sous-jacente Les données.
Et si vous ne le savez pas, le JNI Book est une référence précieuse.
cela peut se faire de la manière suivante:
(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
}
N'oubliez pas d'utiliser
env->GetArrayLength(stringArray);