Maison  >  Article  >  développement back-end  >  Comment appeler correctement une méthode Java depuis Native C sous Android ?

Comment appeler correctement une méthode Java depuis Native C sous Android ?

DDD
DDDoriginal
2024-11-03 20:33:29307parcourir

How to Correctly Call a Java Method from Native C   in Android?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn