Maison > développement back-end > C++ > le corps du texte

Pourquoi est-ce que je reçois une erreur « NoSuchMethodError » lorsque j'appelle une méthode Java à partir de C sous Android ?

Patricia Arquette
Libérer: 2024-11-03 21:23:29
original
971 Les gens l'ont consulté

Why am I getting a

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!