Rumah > pembangunan bahagian belakang > C++ > Mengapakah saya mendapat \'NoSuchMethodError\' apabila memanggil kaedah Java daripada C asli dalam Android?

Mengapakah saya mendapat \'NoSuchMethodError\' apabila memanggil kaedah Java daripada C asli dalam Android?

Barbara Streisand
Lepaskan: 2024-11-03 15:30:03
asal
556 orang telah melayarinya

Why am I getting a

Memanggil Kaedah Java daripada Native C dalam Android

Apabila menyepadukan kod Java dan C dalam Android, mungkin perlu memanggil kaedah Java daripada kod C asli. Artikel ini menangani isu khusus yang dihadapi apabila cuba menggunakan kaedah Java bernama "messageMe" daripada kod asli dalam kaedah "getJniString".

Dalam coretan kod yang disediakan, pembangun cuba memanggil "messageMe" daripada native C dalam kaedah "getJniString". Walau bagaimanapun, kompilasi gagal dengan pengecualian "NoSuchMethodError", menunjukkan bahawa nama kaedah tidak betul.

Isunya terletak pada cara kaedah "messageMe" digunakan dalam kod asli:

<code class="cpp">jobject result = env->CallObjectMethod(jstr, messageMe);</code>
Salin selepas log masuk

Di sini, pembolehubah "jstr" mewakili objek Java yang mana kaedah harus dipanggil dan "messageMe" merujuk kepada ID kaedah. Walau bagaimanapun, oleh kerana "messageMe" ialah kaedah kelas "MainActivity" (seperti yang ditakrifkan dalam kod Java), ia tidak boleh dihantar terus kepada "CallObjectMethod" kerana ia akan bersamaan dengan memanggil "jstr.myMethod()", iaitu tidak betul.

Untuk menyelesaikan isu ini, kod asli hendaklah menghantar pembolehubah "obj", yang mewakili tika kelas "MainActivity", kepada "CallObjectMethod" seperti berikut:

<code class="cpp">jobject result = env->CallObjectMethod(obj, messageMe);</code>
Salin selepas log masuk

Selain itu, jika kaedah "messageMe" ditakrifkan sebagai tidak sah (seperti yang terdapat dalam kod yang diberikan), "CallVoidMethod" harus digunakan dan bukannya "CallObjectMethod":

<code class="cpp">env->CallVoidMethod(obj, messageMe, jstr);</code>
Salin selepas log masuk

Jika keputusan dijangka daripada kaedah "messageMe", kod Java dan tandatangan JNI perlu diubah suai untuk mengembalikan nilai.

Atas ialah kandungan terperinci Mengapakah saya mendapat \'NoSuchMethodError\' apabila memanggil kaedah Java daripada C asli dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan