首頁 > 後端開發 > C++ > 主體

為什麼在 Android 中從 C 呼叫 Java 方法時會收到「NoSuchMethodError」?

Patricia Arquette
發布: 2024-11-03 21:23:29
原創
969 人瀏覽過

Why am I getting a

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!