首页  >  文章  >  后端开发  >  为什么在 Android 中从 C 调用 Java 方法时会收到“NoSuchMethodError”?

为什么在 Android 中从 C 调用 Java 方法时会收到“NoSuchMethodError”?

Patricia Arquette
Patricia Arquette原创
2024-11-03 21:23:29972浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn