Appel d'une méthode Java depuis C dans Android
Dans le développement Android, l'intégration de fonctions C natives avec des composants Java est une exigence courante. Cet article abordera un problème spécifique qui survient lors de la tentative d'appel d'une méthode Java à partir de C .
Problème :
Lorsque vous essayez d'invoquer une méthode Java, en particulier messageMe, à partir du code natif lors de l'exécution de la méthode getJniString, l'application rencontre une exception NoSuchMethodError.
Code Java :
<code class="java">public class MainActivity extends Activity { // ... (Java code to setup and load native library) public void messageMe(String text) { System.out.println(text); } // ... (Other Java code) }</code>
Code C natif (code natif .cpp):
<code class="c++">// ... (Native C++ code to create a Java String) // Get the class and method with the incorrect invocation jclass clazz = env->FindClass("the/package/MainActivity"); jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V"); jobject result = env->CallObjectMethod(jstr, messageMe); // Incorrect invocation // Corrected invocation jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
Solution :
L'erreur survient en raison d'un appel incorrect de la fonction CallObjectMethod dans le code C natif. Pour appeler une méthode d'instance, vous devez transmettre l'objet à la méthode en tant qu'argument. Dans ce cas, l'objet est obj, qui représente l'instance de la classe Java.
L'invocation corrigée doit être :
<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
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!