web-dev-qa-db-fra.com

JNI convertissant jstring en char *

J'ai passé une chaîne d'URL de Java au code C sous la forme jstring type de données par l'intermédiaire de JNI. Et ma méthode de bibliothèque a besoin d'un char * comme URL.

Comment puis-je convertir jstring en char *?

P.S .: Y at-il un avantage à utiliser jcharArray en C? (c'est-à-dire en passant char [] au lieu de chaîne dans la méthode native)

108
Prasham

Voici un lien utile que j'ai trouvé lorsque j'ai commencé avec JNI

http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.Oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

concernant votre problème, vous pouvez utiliser cette

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)   
{
   const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);

   // use your string

   (*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}
216
Jason Rogers

Merci la réponse de Jason Rogers en premier.

Dans Android && cpp devrait être ceci:

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

Peut réparer ces erreurs:

1.error: l'opérande de base de '->' a un type de non-pointeur 'JNIEnv {aka _JNIEnv}'

2.error: pas de fonction correspondante pour l'appel à '_JNIEnv :: GetStringUTFChars (JNIEnv * &, _jstring * &, bool)'

3.error: pas de fonction correspondante pour l'appel à '_JNIEnv :: ReleaseStringUTFChars (JNIEnv * &, _jstring * &, char const * &)'

4.add "env-> DeleteLocalRef (nativeString);" à la fin.

46
kangear