Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memanggil Kaedah Java dari Native C dalam Android?

Bagaimana untuk Memanggil Kaedah Java dari Native C dalam Android?

DDD
DDDasal
2024-11-03 20:33:29410semak imbas

How to Correctly Call a Java Method from Native C   in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn