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