Appel de méthodes Java depuis le C natif sous Android
Lors de l'intégration de code Java et C dans Android, il peut s'avérer nécessaire d'appeler des méthodes Java depuis code C natif. Cet article aborde un problème spécifique rencontré lors de la tentative d'invocation d'une méthode Java nommée "messageMe" à partir du code natif dans la méthode "getJniString".
Dans l'extrait de code fourni, le développeur tente d'appeler "messageMe" à partir du code natif. C dans la méthode "getJniString". Cependant, la compilation échoue avec une exception "NoSuchMethodError", indiquant que le nom de la méthode est incorrect.
Le problème réside dans la manière dont la méthode "messageMe" est invoquée dans le code natif :
<code class="cpp">jobject result = env->CallObjectMethod(jstr, messageMe);</code>
Ici, la variable "jstr" représente l'objet Java sur lequel la méthode doit être appelée, et "messageMe" fait référence à l'ID de la méthode. Cependant, comme "messageMe" est une méthode de la classe "MainActivity" (telle que définie dans le code Java), elle ne peut pas être transmise directement à "CallObjectMethod" car cela équivaudrait à appeler "jstr.myMethod()", ce qui est incorrect.
Pour résoudre ce problème, le code natif doit transmettre la variable "obj", qui représente l'instance de la classe "MainActivity", à "CallObjectMethod" comme suit :
<code class="cpp">jobject result = env->CallObjectMethod(obj, messageMe);</code>
De plus, si la méthode "messageMe" est définie comme void (comme c'est le cas dans le code donné), "CallVoidMethod" doit être utilisée à la place de "CallObjectMethod":
<code class="cpp">env->CallVoidMethod(obj, messageMe, jstr);</code>
Si un résultat est attendu de la méthode "messageMe", le code Java et la signature JNI devront être modifiés pour renvoyer une valeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!