Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erhalte ich einen „NoSuchMethodError', wenn ich eine Java-Methode von C in Android aufrufe?

Patricia Arquette
Freigeben: 2024-11-03 21:23:29
Original
971 Leute haben es durchsucht

Why am I getting a

Aufrufen einer Java-Methode von C in Android: Überwinden von Java-Ausnahmen

In der Android-Entwicklung kann der Aufruf einer Java-Methode von C aus unkompliziert sein. Allerdings kann es sein, dass Sie auf die Ausnahme „NoSuchMethodError“ stoßen, wenn Sie nicht aufpassen.

Der Java-Code

Beginnen wir mit der Untersuchung des Java-Codes:

<code class="java">public class MainActivity extends Activity {
    //...

    public void messageMe(String text) {
        System.out.println(text);
    }

    //...
}</code>
Nach dem Login kopieren

Dieser Code definiert eine Methode namens „messageMe“, die eine Zeichenfolge als Argument verwendet.

Der C-Code

Schauen wir uns nun den C an Code, der versucht, „messageMe“ aufzurufen:

<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>
Nach dem Login kopieren

In diesem Code liegt das Problem in der Funktion „CallObjectMethod“. Für diese Methode muss der Parameter „obj“ das Objekt sein, für das die Methode aufgerufen wird. Im angegebenen Code wird jedoch stattdessen „jstr“ verwendet, die Zeichenfolge, die an die Methode übergeben wird.

Die Lösung

Um dieses Problem zu beheben, benötigen Sie um das richtige Objekt als erstes Argument an „CallObjectMethod“ zu übergeben:

<code class="cpp">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
Nach dem Login kopieren

Da „messageMe“ außerdem eine ungültige Methode ist, sollten Sie „CallVoidMethod“ anstelle von „CallObjectMethod“ aufrufen. Denken Sie außerdem daran, die JNI-Signatur und den Java-Code so zu ändern, dass sie dem neuen Rückgabetyp entsprechen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich einen „NoSuchMethodError', wenn ich eine Java-Methode von C in Android aufrufe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!