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
Lepaskan: 2024-11-03 20:33:29
asal
441 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan