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