Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memanggil Kaedah Java dari Native C dalam Android?
Memanggil Kaedah Java daripada C dalam Android
Dalam pembangunan Android, menyepadukan fungsi C asli dengan komponen Java adalah keperluan biasa. Artikel ini akan menangani isu khusus yang timbul apabila cuba memanggil kaedah Java daripada C .
Masalah:
Apabila cuba menggunakan kaedah Java, khususnya messageMe, daripada kod asli semasa pelaksanaan kaedah getJniString, aplikasi menghadapi pengecualian NoSuchMethodError.
Kod 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>
Kod C Asli (asli .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>
Penyelesaian:
Ralat timbul disebabkan oleh seruan yang salah bagi fungsi CallObjectMethod dalam kod C asli. Untuk memanggil kaedah contoh, anda perlu menghantar objek ke kaedah sebagai hujah. Dalam kes ini, objek ialah obj, yang mewakili tika kelas Java.
Seruan yang dibetulkan hendaklah:
<code class="c++">jobject result = env->CallObjectMethod(obj, messageMe, jstr);</code>
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Java dari Native C dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!