Heim > Backend-Entwicklung > C++ > Warum erhalte ich einen „NoSuchMethodError', wenn ich eine Java-Methode aus nativem C in Android aufrufe?

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

Barbara Streisand
Freigeben: 2024-11-03 15:30:03
Original
556 Leute haben es durchsucht

Why am I getting a

Aufrufen von Java-Methoden aus nativem C in Android

Bei der Integration von Java- und C-Code in Android kann es notwendig werden, Java-Methoden aus aufzurufen nativer C-Code. Dieser Artikel befasst sich mit einem spezifischen Problem, das beim Versuch auftritt, eine Java-Methode namens „messageMe“ aus nativem Code innerhalb der „getJniString“-Methode aufzurufen.

Im bereitgestellten Codeausschnitt versucht der Entwickler, „messageMe“ aus nativem Code aufzurufen C innerhalb der Methode „getJniString“. Die Kompilierung schlägt jedoch mit der Ausnahme „NoSuchMethodError“ fehl, was darauf hinweist, dass der Methodenname falsch ist.

Das Problem liegt in der Art und Weise, wie die Methode „messageMe“ im nativen Code aufgerufen wird:

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

Hier stellt die Variable „jstr“ das Java-Objekt dar, für das die Methode aufgerufen werden soll, und „messageMe“ bezieht sich auf die Methoden-ID. Da „messageMe“ jedoch eine Methode der Klasse „MainActivity“ ist (wie im Java-Code definiert), kann sie nicht direkt an „CallObjectMethod“ übergeben werden, da dies dem Aufruf von „jstr.myMethod()“ gleichkäme falsch.

Um dieses Problem zu beheben, sollte der native Code die Variable „obj“, die die Instanz der Klasse „MainActivity“ darstellt, wie folgt an „CallObjectMethod“ übergeben:

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

Wenn außerdem die Methode „messageMe“ als void definiert ist (wie im angegebenen Code), sollte „CallVoidMethod“ anstelle von „CallObjectMethod“ verwendet werden:

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

Wenn ein Ergebnis von erwartet wird Bei der Methode „messageMe“ müssen der Java-Code und die JNI-Signatur geändert werden, um einen Wert zurückzugeben.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich einen „NoSuchMethodError', wenn ich eine Java-Methode aus nativem 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