Aufrufen einer Java-Methode aus C in Android
In der Android-Entwicklung ist die Integration nativer C-Funktionen mit Java-Komponenten eine häufige Anforderung. Dieser Artikel befasst sich mit einem spezifischen Problem, das auftritt, wenn versucht wird, eine Java-Methode aus C aufzurufen.
Problem:
Beim Versuch, eine Java-Methode aufzurufen, insbesondere messageMe, Aus nativem Code während der Ausführung der getJniString-Methode stößt die Anwendung auf einen NoSuchMethodError Ausnahme.
Java-Code:
<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>
Nativer C-Code (native.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>
Lösung:
Der Fehler entsteht durch einen falschen Aufruf des CallObjectMethod-Funktion im nativen C-Code. Um eine Instanzmethode aufzurufen, müssen Sie das Objekt als Argument an die Methode übergeben. In diesem Fall ist das Objekt obj, das die Instanz der Java-Klasse darstellt.
Der korrigierte Aufruf sollte wie folgt lauten:
<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
Das obige ist der detaillierte Inhalt vonWie rufe ich eine Java-Methode von Native C in Android korrekt auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!