在Android 中從C 呼叫Java 方法
在Android 開發中,將原生C 函數與Java 元件整合是一個常見的需求。本文將解決嘗試從 C 呼叫 Java 方法時出現的特定問題。
問題:
當嘗試呼叫 Java 方法,特別是 messageMe 時,在執行 getJniString 方法期間,應用程式會從本機程式碼遇到 NoSuchMethodError 例外。
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>
本機C 程式碼(本機.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>
解決方案:
該錯誤是由於原生C 程式碼中錯誤呼叫CallObjectMethod 函數而導致的。要呼叫實例方法,您需要將物件作為參數傳遞給該方法。在本例中,物件是 obj,它代表 Java 類別的實例。 正確的呼叫應該是:<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
以上是如何在 Android 中從 Native C 正確呼叫 Java 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!