在 Android 中從 C 呼叫 Java 方法:克服 Java 異常
在 Android 開發中,從 C 呼叫 Java 方法非常簡單。但是,如果不小心,可能會遇到“NoSuchMethodError”異常。
Java 程式碼
讓我們從檢查Java 程式碼開始:
<code class="java">public class MainActivity extends Activity { //... public void messageMe(String text) { System.out.println(text); } //... }</code>
這段程式碼定義了一個名為「messageMe」的方法,它接受一個字串作為參數。
C 程式碼
現在,讓我們看看C 程式碼嘗試呼叫「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>
在此程式碼中,問題出在「CallObjectMethod」函數。此方法要求“obj”參數是呼叫該方法的物件。但是,在給定的程式碼中,它使用“jstr”,這是傳遞給方法的字串。
解決方案
要解決此問題,您需要將正確的物件作為第一個參數傳遞給「CallObjectMethod」:
<code class="cpp">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
此外,由於“messageMe”是一個void 方法,因此您應該呼叫“CallVoidMethod”而不是“CallObjectMethod”。另外,請記住更改 JNI 簽名和 Java 程式碼以匹配新的返回類型。
以上是為什麼在 Android 中從 C 呼叫 Java 方法時會收到「NoSuchMethodError」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!