Maison > Article > développement back-end > Pourquoi est-ce que je reçois une erreur « NoSuchMethodError » lorsque j'appelle une méthode Java à partir de C sous Android ?
Appel d'une méthode Java depuis C dans Android : surmonter les exceptions Java
Dans le développement Android, appeler une méthode Java depuis C peut être simple. Cependant, vous pouvez rencontrer l'exception "NoSuchMethodError" si vous ne faites pas attention.
Le code Java
Commençons par examiner le code Java :
<code class="java">public class MainActivity extends Activity { //... public void messageMe(String text) { System.out.println(text); } //... }</code>
Ce code définit une méthode appelée "messageMe" qui prend une chaîne comme argument.
Le code C
Maintenant, regardons le code C code qui tente d'appeler "messageMe":
<code class="cpp">jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj, jint depth ){ //... // Get the method that you want to call jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V"); //... jobject result = env->CallObjectMethod(jstr, messageMe); //... }</code>
Dans ce code, le problème réside dans la fonction "CallObjectMethod". Cette méthode nécessite que le paramètre "obj" soit l'objet sur lequel la méthode est appelée. Cependant, dans le code donné, il utilise "jstr" à la place, qui est la chaîne transmise à la méthode.
La solution
Pour résoudre ce problème, vous devez pour transmettre l'objet correct comme premier argument à "CallObjectMethod":
<code class="cpp">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
De plus, puisque "messageMe" est une méthode vide, vous devez appeler "CallVoidMethod" au lieu de "CallObjectMethod". N'oubliez pas non plus de modifier la signature JNI et le code Java pour qu'ils correspondent au nouveau type de retour.
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!