Tutorial J2ME Membangun aplikasi client-server dan koneksi dengan database di server

Amri Shodiq (amri.shodiq@gmail.com) 20 Juni 2009

Pada satu siang seorang teman menelpon dari Surabaya, menanyakan realisasi janji saya beberapa waktu sebelumnya. Pada waktu itu saya menjanjikan akan memberikan semacam tutorial tentang bagaimana mengakses (menambah, mengubah dan menghapus) data di server dengan Java Micro Edition. Latar belakangnya begini, rekan saya tersebut: Pak Sugeng (sebut saja begitu), ingin membuat aplikasi ponsel yang bisa digunakan untuk menampilkan data-data pelanggan, kemudian mengeditnya sembari di lokasi pelanggan, hingga menyimpannya kembal. Yang menjadi masalah adalah fasilitas penyimpanan data di ponsel sangat terbatas. Saat ini teknologi yang bisa digunakan di ponsel adalah RMS. Namun RMS memiliki banyak kekurangan jika dibandingkan dengan tujuan ini. 1. RMS bukanlah database relational yang mengijinkan kita melakukan query SQL. RMS, jika boleh saya gambarkan, lebih mirip dengan database masa lampau yang hanya dapat diakses per record dengan menyebutkan id-nya. 2. Masalah yang lain adalah bahwa data yang disimpan di dalam RMS hanya tersimpan di ponsel. Jika kita ingin, kemudian, mentransfer data tersebut ke server database atau ke komputer kita, maka kita harus membuat program untuk pengirimannya (ini masalah karena berarti dua kali kerja. Pada tutorial ini, saya akan mengajak Anda mencoba skema akses database di server menggunakan J2ME.

Aplikasi
Modul server
PHP MySQL

Modul client
J2ME

Koneksi database

Fungsi

HTTP Request

Koneksi HTTP

Thread

Interface

Dalam tutorial ini kita akan mempelajari rancang bangun aplikasi client-server dengan menggunakan beberapa teknologi yaitu: PHP, MySQL dan J2ME. Di sini kita akan belajar melakukan koneksi PHP ke database MySQL, membuat fungsi dan menangani HTTP Request

GET. Sedangkan untuk sisi client, kita akan mempelajari bagaimana melakukan koneksi jaringan dengan protocol HTTP, bagaimana membuat aplikasi bisa berjalan secara threading dan bagaimana menggunakan interface. Seperti yang Anda lihat , dalam tutorial ini beberapa software lain saya butuhkan. Begitu juga Anda, jika ingin mencoba menerapkan isi tutorial ini, Anda harus melakukan beberapa persiapan. Untuk melakukannya, saya perlu melakukan persiapan terlebih dahulu. Justru ini yang sedang saya lakukan (sampe begadang-begadang, padahal keesokan paginya harus meeting dari pagi sampai sore, hiks). Berikut ini yang perlu saya persiapkan: 1. IDE (Integrated Development Environment untuk coding J2ME dan PHP), Dalam tutorial ini, saya menggunakan dua software IDE, Netbeans 6.5 dan Easy Eclipse for PHP 1.2.2. • Netbeans 6.5 Netbeans adalah IDE yang sangat populer untuk Java. Netbeans memiliki beberapa pilihan paket untuk didownload. Dalam tutorial ini, Anda membutuhkan Netbeans 6.5 Mobility (atau, Anda juga bisa menggunakan Netbeans 6.5 Full, tapi saya tidak menyarankannya karena Anda harus download lebih besar dan karena dalam paket ini termasuk server aplikasi Glassfish yang kalau tidak dimatikan bisa membuat beban komputer Anda menjadi besar). • Easy Eclipse for PHP 1.2.2 Jangan heran jika saya menyarankan Anda menggunakan Easy Eclipse for PHP. Apa hubungannya PHP dengan tutorial J2ME? Kok OOT (out of topic) sih? Akan saya jelaskan. Kita akan membangun software client-server. Tentu kita membutuhkan server aplikasi (aplikasi client akan kita buat menggunakan J2ME). Untuk membangun server, kita harus menentukan teknologi apa yang akan kita gunakan, termasuk protokolnya. Aplikasi client-server pada masa lalu (hingga kini pun masih) menggunakan socket programming dan ptotokol proprietary murni (protokol yang khusus digunakan untuk software yang dibangun). Ada pendekatan lain, yaitu menggunakan Web Service. Dengan web service, aplikasi client akan terhubung ke server hanya dengan protocol HTTP. Ini mereduksi waktu yang dibutuhkan untuk membangun protocol. Kelebihan yang lain adalah bahwa karena berjalan di atas HTTP, maka kemungkinan koneksi ini ditutup oleh firewall operator (ingat, kita membangun aplikasi client-server yang berjalan di atas J2ME yang berarti pula kita akan menggunakan jaringan internet melalui operator ponsel). Contoh implementasi Web Service adalah SOAP. Atau ada juga pendekatan yang lebih simple, yaitu XML-RPC yang mengijinkan client memanggil fungsi di server kemudian mendapatkan output dari fungsi tersebut.

Localhost hanya berjalan di emulator. saya tidak menemukan layanan hosting yang menyediakan Java. MySQL dan PHP Beberapa distro Linux sudah menyediakan repository dalam bentuk DVD. PHP umumnya digunakan di atas web server dari Apache (tidak menutup kemungkinan digunakan web server lain). Untuk pengguna Ubuntu. Kita akan membuat aturan main sederhana yang melibatkan J2ME sebagai client dan web server.2). Server side scripting (PHP). Kambing. silakan tiru saja perintah ini: . Untuk implementasi kita. Saya memilih PHP untuk digunakan sebagai server kita. Saya sendiri sebagai pengguna Ubuntu. perlu hosting kan? Karena dengan ponsel nantinya kita tidak bisa menggunakan localhost. Ya. Tentang kambing tidak akan dijelaskan lebih lanjut. cepat. 3. Maka saya menggunakan PHP untuk menghilangkan resiko nantinya scenario ini tidak jalan hanya karena tidak ada server yang bisa mengimplementasikan server side script saya. Database server (MySQL). hampir semua layanan hosting yang saya temui menggunakan PHP. saya menyarankan: • Pengguna Windows menggunakan Xampp Anda dapat menggunakan paket Xampp yang di dalamnya sudah tercakup Apache. saya sudah jelaskan sedikit tentang apa yang akan kita buat dan latar belakang digunakannya PHP. selain juga area penggunaannya jadi sangat terbata. Saya tidak punya server sendiri yang bisa diakses dari internet. dan mudah dipelajari (terutama jika dikaitkan dengan program yang akan saya gunakan untuk mengaksesnya. Kita akan menggunakan MySQL untuk menyimpan data pelanggan yang nantinya akan diakses oleh aplikasi J2ME yang kita buat. MySQL dan PHP. Download saja. hanya saja jauh lebih sederhana.Mana yang akan kita gunakan? Karena tutorial ini ditujukan untuk pemula dan intermediate (bukan expert). maka kita akan mencoba membuat sesuatu yang mirip dengan Web Service. Sebelumnya. Bayar gak? Tentu saja free open source.2. Alasannya sama dengan pengguna MySQL lain: gratis. Saya suka MySQL. PHP). pada item pertama (Easy Eclipse for PHP 1. menggunakan repository yang disupport oleh salah satu server ternama. 2. di luar scope kasus kita yang akan menggunakan aplikasi ini di lokasi pelanggan. Kenapa tidak Java (Servlet atau JSP)? Alasannya mudah saja. intinya Kambing adalah server penyedia software-software open source. Kita juga tidak bisa menggunakan IP local dalam satu network (misalnya kita bekerja di LAN) karena belum banyak ponsel yang mendukung WiFi. Lalu mengapa hosting? Jawabannya mudah. • Pengguna Linux menginstall paket Apache.

java yang berupa Visual Midlet (buat jika tidak ada). MySQL dan PHP5. 4. perhatikan ketika kita menambahkan sebuah Form. lakukan sebagai berikut: . Jika Anda tidak terbiasa dengan istilah drag. Menggunakan Netbeans 6. kemudian dari dialog yang muncul pilih J2ME Project Berikan nama yang baik. atau apapun nama yang Anda berikan untuk Form yang baru Anda tambahkan (defaultnya form). Secara default. Drag sebuah flow dari Mobile Device (Midlet) ke form. Yang kita lakukan melalui remote procedure ini adalah insert. Perintah tersebut digunakan untuk mendownload langsung Apache2.$ sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server Perintah ini saya gunakan dengan Ubuntu 9.5 Mobility Membuat project J2ME dengan Netbeans Menu: File | New Project | J2ME Project Yang perlu Anda lakukan untuk membuat project J2ME baru adalah mengklik File | New Project. update dan delete. saya sebut saja sebagai remote procedure call. Anda bisa membuat flow aplikasi J2ME dengan cara drag and drop. Menentukan flow aplikasi Menu: View | Editors | Flow Netbeans Mobility dilengkapi dengan Flow Editor untuk mengedit urutan jalannya aplikasi J2Me nantinya.04 dan nampaknya juga kompatibel dengan versi-versi yang lain. Anda akan mendapatkan file Main. klik kanan pada Flow View. pilih New/Add | Form. sekaligus menginstallnya di sistem kita. Dengan Visual Midlet. Sebuah mekanisme remote procedure call atau fungsi di server yang bisa dipanggil dari client Untuk memudahkan penyebutkan konsep ini. Untuk menambahkan sebuah Form. Agar lebih mudah. dan seterusnya.

berarti saat ini jika program dijalankan maka yang akan muncul adalah tampilan form. Menambahkan komponen ke atas form Menu: Klik kanan | New/Add | Text Field. Sekarang. buatlah flow dari form ke Mobile Device. kemudian New/Add | Ok Command dan command-command lain yang Anda butuhkan. Sekarang Anda sudah tahu bagaimana membuat flow dari Mobile Device ke form. Sayang. Mudah bukan? Jika sudah. Anda belum member komponen apapun di atas form. dll atau View | Editors | Screen .• • • Klik kiri pada Mobile Device Tahan kemudian seret mouse hingga menyentuh form Lepaskan klik Akan terbentuk sebuah garis dan tanda panah dari arah Mobile Device ke form yang baru Anda buat. Klik kanan pada title bar form.

Di bawah tab-tab nama file. Anda sudah bisa menambahkan komponen yang Anda perlukan. Nah. Mudah bukan? . Coba tambahkan lima buah TextField dan tiga buah Command hingga hasilnya seperti gambar di atas. Atau Anda bisa juga menambahkan komponen ke atas suatu form dengan cara meng-klik kanan form-nya. kemudian memilih New/Add | <komponen-yangAnda-ingin-tambahkan>. Komponen-komponen tersebut bisa Anda lihat pada window Pallete (sebelah kanan).Berikutnya. kemudian klik Screen View (persis di bagian atas diagram). klik title bar form. Akan ditampilkan bentuk ponsel yang bisa Anda tambahkan komponen-komponen dan tombol.

. Setelah Anda tekan Run. Kita bisa menambahkan plugins lain dengan cukup mendownload dari plugins directory di website Easy Eclipse. Berikutnya Anda akan dihadapkan pada Source Code Editor dimana Anda dipersilakan menambahkan kode program yang Anda inginkan. Easy Eclipse dipaket dalam bentuk yang mudah diinstall. kemudian mengklik dua kali file plugins tersebut layaknya file executable. kemudian pilih Go To Source pada pop up menu yang muncul. Klik pada komponen yang ingin ditambahkan event-nya.Menambahkan kode program pada event tertentu Menu: Klik kanan pada component | Go To Source Komponen seperti tombol/Command tidak ditambahkan hanya untuk memperindah tampilan. maka kita perlu menambahkan event click pada komponen tersebut. Melainkan komponen tersebut ditambahkan karena suatu tujuan. Klik kanan pada nama project kita di Project Naviagator window (sebelah kiri). instalasi plugins-plugins ini kadang menjadi masalah karena ada beberapa yang cukup sukar.2. Caranya mudah sekali. tunggu sebentar. Klik kanan. Menjalankan program Menu: Klik kanan nama project | Run Untuk mencoba menjalankan prototype software yang kita bangun. sedangkan tombol Edit (dari OK Command yang diubah Text-nya menjadi “Edit”) digunakan untuk meminta program mengedit data pengguna dengan nomor ID tertentu. Nah. Menggunakan Easy Eclipse for PHP 1.2. Untuk keperluan tersebut. Salah satunya adalah plugins untuk coding PHP dengan Eclipse. caranya mudah sekali. Sayangnya. pilihlah Run. Eclipse terkenal dengan banyaknya plugins untuk berbagai keperluan. misalnya: tombol Exit Command ditambahkan untuk keluar dari program. Netbeans akan menginisiasi Sun Wireless Toolkit yang sudah terbundle bersama Netbeans Mobility. Easy Eclipse sebenarnya adalah pemaketan kembali Eclipse IDE project. Kemudian pada pop up menu yang muncul.

tepat di bawah home directory Anda (jika username Anda adalah pokemon. misalnya tutorial) dan direktori yang benar pada Location. Sedangkan pengguna Linux. httpd. Sedangkan jika Anda menggunakan Linux. Beginilah tampilan welcome Easy Eclipse Membuat project PHP baru Menu: File | New | PHP Project Pada dialog New PHP project isikan Project name bebas (buat yang sesuai dengan project yang Anda kerjakan. jika di system Anda sudah terinstal Java Runtime. Jika Anda menggunakan Windows. Versi Linux adalah file-file yang terkompresi saja. silakan buat direktori baru di home direktori Anda kemudian tambahkan entry virtual directory pada file konfigurasi web server. Anda bisa langsung menjalankan file eclipse (file binary) dengan mengklik-nya dua kali. Rekomendasi dari saya (untuk pengguna Ubuntu. misalnya: c:/xampp/htdocs). . lakukan dengan urutan sebagai berikut: 1. maka home directory Anda adalah /home/pokemon). Nama project akan menjadi nama direktori aplikasi web kita. Jadi akan ada direktori baru dengan path /home/pokemon/Projects. Anda bisa menginstall dengan cukup mudah. Dalam hal ini nantinya saya bisa browsing dengan browser saya ke alamat http://localhost/Tutorial/. jadi Anda cukup mengekstrak file yang Anda download. silakan Browse saja ke lokasi/direktori root directory Xampp (direktori ini mengandung htdocs.Jika Anda sudah mendownload file instalasinya. bisa menggunakan Easy Eclipse versi Linux. Buat direktori Projects. dan Linux yang lain mungkin).conf. Pengguna Windows cukup mengklik dua kali file tersebut dari Windows Explorer kemudian mengikutinya seperti instalasi aplikasi Windows pada umumnya.

Perhatikan gambar di atas.2. Anda bisa mendapati semua file yang ada dalam project Anda tersebut. Anda bisa melihat browser untuk preview pekerjaan Anda secara realtime. Kemudian klik check Use default location agar Anda tidak perlu mengulang langkah ini pada project-project berikutnya. Kita akan mengedit file-file PHP kita di sini. Anda akan mendapatkan file berisi: . preview-nya akan muncul di bagian tersebut. 3. Di bagian bawah IDE. Di sana. Edit file konfigurasi Apache (httpd. Isikan /home/pokemon/Projects pada Location (di dialog New PHP project). Lokasi Container ini relative terhadap workspace (yang Anda set pada Location di langkah sebelumnya). Tambahkan entry virtual directory. Bagian tengah IDE (yang berwarna abu-abu) adalah editor. Di bagian sebelah kiri. Di bagian kanan. Anda bisa melihat Project Navigation. Klik Finish. Anda bisa melihat projectproject Anda. Jadi ketika Anda save file PHP Anda. pada tab Outline kita bisa melihat fungsi-fungsi yang kita buat nantinya di sana. Jika Anda expand sebuah project dengan mengklik tanda plus (+) di sebelah kiri nama project Anda.conf).php) dan biarkan lokasi Container-nya. Secara default. Menambahkan file PHP Menu: File (atau klik kanan pada nama project) | New | PHP File Masukkan File name yang Anda inginkan (default: file.

Preferences . PHP Browser memiliki address bar yang jika tidak ada masalah dalam setting Anda. maka tidak akan terjadi masalah. Akan muncul dialog seperti ini: Untuk menambahkan variabel atau melakukan yang lainnya. Di sana terdapat window output yang memiliki tab PHP Browser. Lakukan ini secara rutin. selalu simpan dengan menekan tombol Ctrl+S.PHP .<?php /* * Created on Jun 17.Code Templates */ ?> Anda dapat mengubah default template ini melalui menu Window | Preferences | PHPeclipse | PHP | Code Templates. Setelah Anda melakukan beberapa perubahan pada kode sumber program Anda.PHP . maka nilai default-nya adalah: . Anda bisa mulai menuli kode program Anda tepat di bawah penutup komentar (*/ ).Preferences . karena browser internal IDE Eclipse akan langsung mengenali path Project Anda. Perhatikan di bagian bawah IDE.Code Templates dari file baru tersebut. Melihat bagaimana program Anda berjalan Jika Anda bekerja di lingkungan Windows dan Anda telah men-set lokasi workspace Anda di root directory webserver Anda (htdocs). 2009 * * To change the template for this generated file go to * Window . Saya juga umumnya menghapus baris berikut: * To change the template for this generated file go to * Window . klik saja Edit.PHPeclipse .PHPeclipse . meskipun tanpa mengubah template-nya.

Klik tombol Start pada Apache dan MySQL dan pastikan tampilannya seperti ini: Kata Running dalam kotak highlight berwarna hijau terang menunjukkan Apache dan MySQL berjalan dengan baik. Jika Anda menggunakan Xampp (dalam Windows).exe. tampilan pada PHP Browser akan seperti ini: Solusi masalah ini sederhana saja. <lokasi-instalasi-xampp>/xampp-control. Web server Anda mati Gejalanya.http://localhost/<project-Anda>/<file-yang-sedang-Anda-edit> Sekiranya ada masalah. maka ada beberapa kemungkinan: 1. 2. Setting project Anda salah .exe Akan muncul tampilan seperti berikut. nyalakan web server Anda. nyalakan xampp-control.

kita akan membangun skema database (lengkap dengan table-tablenya) di mana kita bisa melakukan fungsi-fungsi insert-read-update-delete. dan deleteCustomerData(). Saya berikutnya akan buat 4 fungsi dengan script PHP dalam sebuah file saja. Keempat fungsi tersebut tentunya harus melakukan fungsinya dengan baik. Anda bisa meng-klik kanan pada nama project Anda kemudian pilih Properties. yaitu function. maka Anda bisa melihat preview-nya di PHP Browser. Jika setting sudah OK. Solusinya. Pada kasus saya. readCustomerData(). Klik Apply kemudian OK. maka setiap Anda men-save perubahan yang Anda buat.Gejala yang terjadi jika setting project Anda salah adalah path yang ditunjukkan oleh address bar PHP Browser salah.php. updateCustomerData(). Klik PHP Project Settings. Pilih radio button Use workspace settings kemudian klik Configure Workspace Settings … Pada window Preferences yang muncul. isikan http://localhost pada Localhost dan masukkan <lokasi-instalasi-xampp>/htdocs pada DocumentRoot. Menulis modul server Skenario Begini rencananya. yaitu mengacak- . Fungsi-fungsi tersebut antara lain. Nanti. isinya adalah C:/xampp/htdocs. insertCustomerData().

Di tahap ini. Sebenarnya saya ingin menggunakan tool MySQL Query Browser untuk melakukannya. Di dalamnya saya membuat tabel datapelanggan yang memiliki field-field: idpelanggan. Begini rencananya. Dalam format tertentu pula. Hasil dari server akan dikembalikan ke ponsel dalam bentuk HTTP Response dari request yang dikirim. Jika ya. saya harus membuat method untuk mengirimkan data apapun melalui protokol HTTP. juga table dan field-fieldnya. Saya akan membuat sebuah skema database bernama tutorial dengan server database MySQL. Nah. Masih ada MySQL Yog. berikut parameternya. dan catatan. Nah. kemudian. tagihan. apakah parameternya lengkap atau tidak. saya harus juga menyediakan suatu cara agar fungsifungsi tersebut bisa diakses dengan ponsel. saya harus membuat tampilan program di ponsel untuk simulasi program ini. kemudian berikan hasilnya kepada peminta. Maka.acak database. www. Maka saya sediakan sebuah listener dengan PHP untuk mendengarkan. karena saya rasa ini tool yang cukup baik. jika ada permintaan fungsi. apakah fungsi yang diminta terdapat di sistem atau tidak.MySQL. sampai pada point ini sisi server sudah selesai. Ini mudah sekali dilakukan dengan Netbeans 6. pada ponsel pun harus disiapkan method untuk parsing response dari server ini. MySQL Front dan Heidi SQL. Saya kemudian akan membuat fungsi/method dengan J2ME untuk memanggil keempat fungsi tersebut.5 yang mempunyai fitur Visual MIDlet. materi sudah berpindah kea rah pengembangan modul client. Terakhir. Saya suka MySQL Query Browser sebab tools ini dibuat sendiri oleh si produsen MySQL. Setiap method tersebut nantinya akan dikirimkan dengan format tertentu ke server menggunakan protokol HTTP. Setelahnya.php akan mengecek. nama. alamat.php). Peminta (dalam hal ini pengirim HTTP Request) yang saya maksud adalah ponsel. jalankan fungsi yang diminta. Berarti juga. Jika ya. cek lagi. . Memang untuk keperluan ini. MySQL Query Browser bukanlah pilihan yang terbaik.net. saya juga harus menambahkan fungsi untuk parsing data dari ponsel ini di sisi servernya (function. tentu saja saya harus membuat terlebih dahulu databasenya. fungsi tersebut adalah pemetaan dari tiap fungsi server. maka function. Membangun skema database di sisi server Sebelum bisa punya mekanisme insert-read-update-delete. tentu saja.

mungkin PhpMyAdmin. Setelah saya Save skema tersebut. Begini caranya: $ sudo apt-get install phpmyadmin Untuk pengguna Xampp di WIndows. MySQL dan PHP. anggap saja kondisinya. maka saya gunakan APT-GET. Meskipun entah kenapa. .. Nah sekarang. saya tidak bisa terhubung ke database MySQL di localhost. Nampaknya tools ini adalah tools yang paling populer untuk mengelola database MySQL. Kemudian saya langsung membuat table di dalamnya dengan nama datapelanggan dengan jumlah field 5. tagihan (INT). Hal pertama yang saya lakukan adalah membuat database-nya seperti yang dibicarakan tadi. Mudah-mudahan Anda sudah cukup mengenalnya. alamat (TEXT). Padahal saya sudah nyalakan servicenya. nama (VARCHAR[50]). MySQL Query Browser saya masih error. aneh. juga PhpMyAdmin. Saya akan betulkan nanti. Anda boleh gembira karena PhpMyAdmin sudah menyediakannya untuk Anda. Hmm. Field-field yang dibuat antara lain: idpelanggan (INT). saya sudah punya Apache HTTPD. dan catatan (TEXT).. saya akan melanjutkan dengan membuat file PHP untuk servernya. Tapi saya harus download aplikasi ini. bedanya APT-GET berjalan pada console dan mampu memperoleh paket-paket software dari internet. tools untuk mendownload sekaligus menginstall aplikasi. Karena saat ini saya menggunakan Ubuntu. Saya membuat sebuah skema database dengan nama tutorial. hiks.Namun ada sedikit masalah. ketika saya menjalankan MySQL Query Browser. APT-GET berfungsi seperti Add/Remove Programs pada Windows. Saya coba tool lain deh. Tidak masalah. Tabel di atas di buat menggunakan PhpMyAdmin.

'root'. // Bagian utama untuk menerima request HTTP GET if (isset ($_GET["function"])) { switch ($_GET["function"]) { } } // Fungsi-fungsi function listCustomerData() { } function insertCustomerData($nama. Membuat file function. fungsi-fungsi masih kosong. if (!$link) { die('Koneksi database gagal: ' . Di dalamnya saya membuat kerangka fungsi-fungsi yang dibutuhkan dan menambahkan koneksi ke MySQL yang sederhana di awalnya. $nama. Karena saat ini saya memakai Linux dan installasi Apache-nya menggunakan APT. Ya.php di dalam project Tutorial. $tagihan. begitu juga dengan bagian untuk menangani HTTP Request GET. $catatan) { } function deleteCustomerData($idPelanggan) { } // Menutup koneksi mysql_close($link)."). $alamat. } mysql_select_db("tutorial") or die("Database tidak dapat dibuka. Jadi.php di dalam direktori tersebut. Jika Anda ingat sub bab yang membahas penggunaan Easy Eclipse. mysql_error()). Dalam kerangkan ini. 2. Maka ini yang saya lakukan: 1. Membuat direktori Tutorial dalam direktori Projects (direktori tempat saya menyimpan proyek-proyek PHP saya. <?php // Koneksi ke database MySQL $link = mysql_connect('localhost'.php Semoga Anda masih ingat dengan rencana saya. workspace saya ada di /home/pokemon/Projects. ?> . ''). dan ditutup di akhir file. saya akan membuat sebuah script PHP dengan nama function. $tagihan. lokasinya kurang lebih seperti ini: home/pokemon/Projects/Tutorial. Pokemon adalah username saya di system operasi. $alamat. $catatan) { } function readCustomerData($idPelanggan) { } function updateCustomerData($idPelanggan.Menulis function.

"). Perhatikan di atas. 'root'. Jika tidak berhasil. maka akan muncul pesan Database tidak dapat dibuka. maka mestinya koneksi dengan MySQL sudah benar.php.3. kita sudah memiliki koneksi ke skema database tutorial.conf Perintah di atas berfungsi untuk membuka Kate (text editor sederhana di Kubuntu) dengan mode admin (root).d/apache2 restart Sampai tahap ini. Mengubah file konfigurasi Apache agar bisa mendeteksi projek baru saya.php. Saya tambahkan entry berikut ini Alias /Tutorial/ "/home/pokemon/Projects/Tutorial/" AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Order allow. Sampai tahapan ini. Restart server Apache saya $ sudo /etc/init. ''). Jangan salah ya. (Anda yang pengguna Xampp di Windows tidak perlu melakukan langkah ini) $ sudo kate /etc/apache2/apache2.deny Allow from all LanguagePriority en cs de es fr it nl sv pt-br ro ForceLanguagePriority Prefer Fallback 4. 5. // Koneksi ke database MySQL $link = mysql_connect('localhost'. } mysql_select_db("tutorial") or die("Database tidak dapat dibuka. if (!$link) { die('Koneksi database gagal: ' . mysql_error()). Function.php sudah diakses dan jika tidak ada pesan error ketika kita buka dengan Browser. lokasi projek saya ditulis 2 kali. maka script PHP yang dijalankan adalah /home/pokemon/Projects/Tutorial/function. function. misalnya skema database belum dibuat.php saya lengkapi dengan baris program yang meminta PHP untuk menggunakan skema database tutorial. Langkah ini gunanya adalah agar nanti jika saya mengetikkan http://localhost/Tutorial/function. .

yaitu untuk insert. '$catatan')". $sql = "INSERT INTO datapelanggan (nama. catatan FROM datapelanggan WHERE idpelanggan='$idPelanggan'". sebagai tambahan. } } else { // Data tidak ditemukan $error = 2. } $result = array ( "errorcode" => $error. saya juga berikan fungsi untuk menmperlihatkan daftar lengkap pelanggan. catatan) VALUES ('$nama'. $result = mysql_query($sql). return $result. } function insertCustomerData($nama. $data = array (). alamat. Silakan perhatikan kode program berikut: function listCustomerData() { global $link. $alamat. nama FROM datapelanggan". Fungsi ini (listCustomerData()) saya tambahkan terakhir tetapi saya tulis paling awal. saya melengkapi program kita dengan fungsi-fungsi yang sudah dijanjikan pada bagian awal. if ($result) { if (mysql_num_rows($result)) { $data = array (). read. "nama" => $row["nama"] ). while ($row = mysql_fetch_assoc($result)) { $buffer = array ( "id" => $row["idpelanggan"]. $tagihan. '$alamat'. $error = 0. } function readCustomerData($idPelanggan) { global $link.Melengkapi fungsi-fungsi utama Berikutnya. tagihan. update dan delete data dalam tabel. $result = mysql_query($sql). } } else { // Query SQL gagal $error = 1. Oh ya. if ($result) { if (mysql_num_rows($result)) { . $sql = "SELECT idpelanggan. '$tagihan'. array_push($data. "data" => $data ). $buffer). $sql = "SELECT idpelanggan. alamat. tagihan. $result = mysql_query($sql). Jangan bingung ya. $catatan) { global $link. nama.

$result = mysql_query($sql). return $result. $catatan) { global $link. catatan='$catatan' WHERE idpelanggan='$idPelanggan'". kemungkinan Anda sudah berpengalaman dengan web based programming. "data" => $data ). Tidak masalah. return $result. } } else { // Data tidak ditemukan $error = 2. "alamat" => $row["alamat"]. Mengapa permintaan GET (bukan POST)? Jika Anda berpengalaman. alamat='$alamat'. $alamat. kita sudah memiliki fungsi-fungsi yang dibutuhkan. $nama. } $result = array ( "errorcode" => $error. "tagihan" => $row["tagihan"]. $sql = "DELETE FROM datapelanggan WHERE idpelanggan='$idPelanggan'". "nama" => $row["nama"]. Dalam tutorial ini sengaja saya gunakan request GET agar tutorial ini lebih mudah dipahami. "catatan" => $row["catatan"] ). $result = mysql_query($sql). karena modul untuk mengirimkan request POST dengan J2ME akan sedikit lebih sulit dibuat. } function updateCustomerData($idPelanggan. tagihan='$tagihan'. } function deleteCustomerData($idPelanggan) { global $link. } Menangani HTTP Request GET Hingga tahap ini.while ($row = mysql_fetch_assoc($result)) { $data = array ( "id" => $row["idpelanggan"]. target kita kali ini hanyalah dasarnya saja. } } else { // Query SQL gagal $error = 1. return $result. Tetapi kapan fungsi ini digunakan? Kita perlu melengkapi program kita dengan kode berikut untuk menangani permintaan GET. $sql = "UPDATE datapelanggan SET nama='$nama'. $tagihan. // Fungsi utama untuk menerima request HTTP GET if (isset ($_GET["function"])) { .

$_GET["parameters"]). $parameters[3]). case "UPDATE" : { if (isset ($_GET["parameters"])) { $parameters = explode("||". if ($result["errorcode"] == 0) { echo "##". "||" . echo $result. if ($result) { echo $result["errorcode"]. $parameters[3]. $result = readCustomerData($parameters). echo $result. $_GET["parameters"]). $parameters[2]. } }. $result = deleteCustomerData($parameters). case "READ" : { if (isset ($_GET["parameters"])) { $parameters = $_GET["parameters"].switch ($_GET["function"]) { case "INSERT" : { if (isset ($_GET["parameters"])) { $parameters = explode("||". } } break. if (count($parameters) == 5) { $result = updateCustomerData($parameters[0]. $parameters[2]. } } } break. $parameters[1]. "||" . } else echo 3. $result["data"]["catatan"]. "||" . "||" . $parameters[4]). } } . echo $result. $result["data"]["nama"] . echo $result["data"]["id"] . case "DELETE" : { if (isset ($_GET["parameters"])) { $parameters = $_GET["parameters"]. $parameters[1]. if (count($parameters) == 4) { $result = insertCustomerData($parameters[0]. // 3 adalah error code parameter tidak cocok } } break. $result["data"]["tagihan"] . $result["data"]["alamat"] .

mengubah.php?function=UPDATE&parameters=1||Nunik %20Kutoarjo%20Yulianingsih||Perumahan%20Kurnia%20Alam%20Permai%20Bl ok%20E%20No%209%20Depok||150000||Lunas • http://localhost/Tutorial/function. Anda bisa mengeceknya dengan mengetikkan URL berikut ini ke address bar browser Anda: • http://localhost/Tutorial/function.php?function=READ&parameters=1 • http://localhost/Tutorial/function.5) dengan tambahan modul J2ME File-file PHP yang telah disiapkan sebelumnya. Kalau belum nyambung. Menampilkan nilai field-field dalam record di tampilan ponsel semuanya dengan J2ME. Membuka koneksi HTTP ke server dan mengambil hasilnya 2. Tetapi saya kurang yakin. Apakah Anda melihat ada yang kurang? Jika Anda melihatnya.php?function=DELETE&parameters=1 URL-URL di atas berturut-turut digunakan untuk menambah. silakan baca bagian sebelumnya.break. Dalam artikel kali ini kita akan melakukan: 1. kita akan mulai membuat projek J2ME-nya. Yang Anda butuhkan untuk melakukannya adalah: • • Netbeans Mobility (rekomendasi: versi 6. semestinya kita sudah punya file PHP untuk menangani permintaan HTTP GET yang dikirim dari ponsel. Menulis modul client Hingga saat ini. Nah jika Anda menemukan kekurangannya. Di bagian berikutnya. bersama database MySQL dan web server . membaca dan menghapus data sebuah record di tabel pelanggan dalam skema database tutorial. Penasaran? Silakan mencoba. Mem-parsing field-field dari String sederhana yang didapat dari Server 3. berarti Anda memperhatikan. silakan kirim email kepada saya (alamat ada di bawah judul ebook). Menyimpan hasil parsing ke dalam sebuah variabel instance class yang khusus dibuat untuk satu record 4.php?function=INSERT&parameters=Nunik%20 Yulianingsih||Perumahan%20Kurnia%20Alam%20Permai%20Blok%20E%20No% 209%20Depok||150000||Lunas • http://localhost/Tutorial/function. } } Selesai sudah script PHP sebagai server aplikasi kita.

Membuat Graphical User Interface Tadi kita sudah bicarakan tentang bagaimana memulai project baru dengan Netbeans 6. kita membutuhkan pengetahuan tentang class dan konsep Thread. Anda bisa menambahkan beberapa komponen. Berikutnya. seperti pada gambar. melakukan koneksi jaringan kadang membutuhkan waktu tertentu. di bawah tab-tab nama file. . Ya.java yang berupa class Visual MIDlet. textFieldId textFieldName textFieldAddress textFieldBillValue textFieldNotes Anda sudah paham kan bagaimana mengubah nama komponen-komponen tersebut? Mudah saja. Pada Screen Editor. dan class HttpConnection. Membuat koneksi HTTP Untuk sementara kita tinggalkan dulu Screen Editor.5. klik kanan komponen yang ingin Anda ubah namanya. kemudian klik Screen View (persis di bagian atas diagram). Selanjutnya. silakan tambahkan juga 2 Ok Command dan 1 Exit Command. 5. Anda tahu kan. kemudian pilih Rename dari menu pop up yang muncul. 2. Pada Screen Editor. 4. saya asumsikan Anda sudah membuat project baru bernama Tutorial dan di dalamnya sudah ada Main. Anda sudah bisa kan? Baik. Atau Anda bisa dapat juga melakukannya dengan memilih menu View | Editors | Screen. 3. ubah view Anda ke mode Screen Editor dengan cara klik title bar form dari Flow Editor. Untuk contoh kita ini saya tambahkan 5 buah TextField yang masing-masing saya beri nama (variabelnya): 1. class Connector. Untuk melakukan koneksi HTTP ke server. Kita perlu membuat thread baru untuk melakukan koneksi dengan HTTP agar aplikasi kita tidak blocking (terrasa seperti hang) ketika koneksi berjalan.

io. ThreadListenable parent = null. Begitulah ringkasnya.HttpConnection. import javax.command = command. ThreadListenable parent) { // command digunakan untuk menentukan fungsi apa yang // akan dipanggil this. import javax.InputStream. import java. String server = "localhost".microedition. String[] parameters = null. import java.Class Connector diperlukan untuk membuat object HttpConnection pada J2ME. public HttpThread(String command.IOException.io. // parameters digunakan untuk memberikan parameter fungsi tersebut this.io.microedition. try { // pada contoh ini kebetulan yang dijalankan hanya fungsi READ // yang menggunakan 1 parameter saja // silakan ubah sendiri jika Anda ingin menjalankan fungsi lainnya con = (HttpConnection) . InputStream is = null. silakan baca terus tutorial ini.parent = parent. Detilnya.parameters = parameters. this. import java.java. HttpThread. /** * * @author Amri Shodiq */ public class HttpThread implements Runnable { String command = "". } public void run() { HttpConnection con = null. String[] parameters.io.io.Connector.ByteArrayOutputStream.

close().open("http://"+server+"/Tutorial/function. is. while ((ch = is. "//text plain"). // kirim hasilnya ke Midlet parent.setRequestProperty("Connection". } } else { System. } str = new String(bytestream.getResponseCode() == HttpConnection. int ch.println("String: " + str). } } } .read()) != -1) { bytestream. con.read(incomingData).php?"+ "function="+command+"&parameters=" + parameters[0]).GET).out. String str = "". if (len != -1) { byte incomingData[] = new byte[len].getLength().setHttpResult(str).out.getMessage()). int len = (int) con.openInputStream(). // kirim hasilnya ke Midlet parent. "close"). if (con. // hanya untuk test System.println(ex.out.Connector. bytestream.out.setRequestProperty("Content-Type".HTTP_OK) { is = con.setRequestMethod(HttpConnection.println("Server memberi jawaban tidak OK").toByteArray()). con. str = new String(incomingData). con. } } catch (IOException ex) { System. // hanya untuk testing System. } else { ByteArrayOutputStream bytestream = new ByteArrayOutputStream().println("String: " + str).setHttpResult(str).write(ch).

Method ini disediakan agar HttpThread dapat mengembalikan hasil.java harus memiliki method setHttpResult().Perhatikan di atas. artinya kita akan membuat Main.java /** * * @author Amri Shodiq */ public interface ThreadListenable { public void setHttpResult(String someString).java) untuk ditampilkan. pada kode program di atas saya berikan beberapa warna lain. Kepada parent inilah HttpThread akan mengembalikan hasil. Perhatikan. kita membuat file HttpThread khusus untuk menangani koneksi HTTP dengan Thread kemudian mengirimkan hasilnya ke MIDlet (Main. Tetapi penggunaan interface di sini dianjurkan untuk implementasi yang baik. kita masih dapat menggunakan HttpThread yang sama untuk menangani koneksi HTTP. GPRS) Hijau: membaca response dari server Biru: mengembalikan hasil ke MIDlet (Main. Pada kasus ini kita menggunakan Thread yang mengimplement interface Runnable (artinya nanti class ini bisa diperlakukan sebagai thread). Mengapa tidak langsung saja memasukkan class Main sebagai input parameter untuk constructor HttpThread? Anda bisa saja melakukannya. asal MIDlet tersebut mengimplementasikan interface ThreadListenable. Detilnya tidak akan dijelaskan dalam tutorial ini. } Dengan mengimplementasikan Interface ini kepada Main. . Siapakah ThreadListenable? Kita akan mengimplementasikan ThreadListenable untuk Main (Visual Midlet kita) agar sebuah variabel dalam midlet tersebut dapat diupdate oleh HttpThread. Inilah source code interfacenya: ThreadListenable. Jika misalnya nanti aplikasi ini terdiri atas beberapa MIDlet. Membuat interface ThreadListenable Perhatikan pada source code di atas (HttpThread. untuk menunjukkan baris-baris yang penting: • • • Merah: untuk baris program yang berkaitan dengan koneksi dengan HTTP (Internet.java. kita menggunakan class ThreadListenable untuk variabel parent.java).java) untuk selanjutnya ditampilkan.

private int billValue = 0. Selesai. String name. private String billNotes = "". Method-methodnya digenerate otomatis oleh Netbeans setelah saya block variabel-variabel yang saya tulis. } } Ini saja yang perlu Anda tulis. berikutnya Anda cukup klik kanan pada kode sumber Anda. customerName. int value. Kode programnya sebagai berikut. Untuk menulis kode program di bawah ini saya hanya menulis variabel-variabelnya saja (customerId. String notes) { this. Pilih Refactor | Encapsulate Fields.customerId = id. Akan muncul dialog Encapsulate Fields. public class CustomerRecord { private int customerId = 0.Membuat class CustomerRecord Class ini akan kita gunakan sebagai Bean untuk menyimpan record yang kita dapat dari HTTP server. kemudian klik kanan. this. String address. Klik tombol Select All kemudian klik tombol Refactor. Klik tombol Select All. this.customerName = name. this. private String customerName = "". public CustomerRecord() { } public CustomerRecord(int id.billNotes = notes. . kemudian klik Refactor. saya akan beritahukan satu rahasia untuk Anda. this. Sebentar. private String address = "".billValue = value. pilih Refactor kemudian Encapsulate Fields … pada menu pop up yang muncul. dll).address = address.

private CustomerRecord currentCustomer = null.java seperti: 1. split() Method ini berfungsi untuk memecah sebuah string berdasarkan separator yang ditentukan dalam parameternya.java: private String httpResult = "". Kita menggunakannya karena hasil dari HTTP request kita menggunakan format ini. Saya menambahkan beberapa method di dalam Main.java (Midlet utama) Saya menambahkan 2 variabel di dalam Main.Menyelesaikan Main. .

textFieldNotes. perhatikan kode program di bawah ini: private void showCurrentCustomer() { if (currentCustomer instanceof CustomerRecord) { try { System.setString(currentCustomer. textFieldAddress.getAddress()).setString(String.println("Name: " + currentCustomer.printStackTrace().getCustomerName()).out.println("Id: " + currentCustomer.out. Jika Anda hanya ingin tahu kode program yang saya tambahkan ke Main.valueOf( currentCustomer.out.getBillNotes()). } } } Method di atas dipanggil ketika MIDlet menampilkan isi variable currentCustomer (pelanggan yang sedang dilihat datanya) ke dalam TextField-TextField.setString(String. showCurrentCustomer() Method ini digunakan untuk menampilkan nilai variabel currentCustomer ke dalam Form. System. textFieldName. System.java.out. 3.setString( currentCustomer. Lebih jauh.out.getAddress()).valueOf( currentCustomer. System.getBillNotes()).getBillValue())). Jika Anda perlu melihat kode sumber lengkap aplikasi ini Anda mendownloadnya di suatu tempat. } catch (Exception e) { e. textFieldId.getBillValue()).2.getCustomerId())).getCustomerId()). public void setHttpResult(String string) { .println("Bill notes: " + currentCustomer. textFieldBillValue. setHttpResult() Method ini digunakan untuk mengupdate variabel httpResult dari HttpThread. System. di akhir method ini juga mengupdate variabel currentCustomer.println("Bill value: " + currentCustomer.println("Address: " + currentCustomer.getCustomerName()).setString( currentCustomer.

parseInt(texts[3]).println("split start. text[1] berisi field kedua dan seterusnya.substring(index + separator. i++) { System..indexOf(separator).out.equals("0")) { String[] texts = split(result[1]. for (int i = 0. texts[4]). } } Method setHttpResult() digunakan oleh HttpThread untuk mengembalikan hasil berupa response dari server kepada Main. private String[] split(String original.substring(0. Langkah ini ditulis pada baris program yang ditulis dengan warna merah.length()).. Setelah diparsing...indexOf(separator).. "||").. if (result[0]..."). Baris-baris program di atas dua kali memanggil method split()...out.println(i + ". dengan pemisah berupa ‘##’.. Isi variable ini kemudian di-parsing untuk mendapatkan kode error dan response server.length. Berikut adalah kode sumber method split(). index = original.. index)). showCurrentCustomer(). Display. } else { Alert alert = new Alert("Ada yang tidak beres. Berikutnya kita akan menyimpan nilai field-field tersebut ke dalam variable instance dari class CustomerRecord.addElement(original. Jika kode error bernilai 0 (yang berarti koneksi HTTP berjalan lancar).httpResult = string.FOREVER). yaitu currentCustomer.parseInt(texts[0]).. } currentCustomer = new CustomerRecord(Integer.. } . Integer. text[0] berisi field pertama.getDisplay(this).setCurrent(alert). texts[2]. String separator) { Vector nodes = new Vector(). alert.. System.. String[] result = split(string. "##").setTimeout(Alert..java (di dalam variable httpResult). response server yang tersimpan di dalam variabel result[1] kemudian diparsing dengan pemisah berupa ‘||’ untuk mendapatkan nilai field-field dalam response tersebut. texts[1].. while (index >= 0) { nodes. // Parse nodes into vector int index = original. " + texts[i]). original = original. i < texts."). field-field tersebut dimasukkan ke dalam variable text yang berrupa array.

start(). variabel tombolnya adalah okCommand1).out. loop++) { result[loop] = (String) nodes.out.getString(). Pilih Go To Source. } } return result. //System. System. Masukkan kode berikut: else if (command == okCommand1) { // write pre-action user code here // mengirimkan request ke server dengan command = READ // dengan sebuah parameter sesuai isi textFieldId HttpThread thread = new HttpThread("READ". Kembali ke Screen Editor.elementAt(loop). kita perlu menambahkan event yang men-trigger pemanggilan httpThread. } Seperti yang Anda lihat.getString()}. . yaitu “READ” dan parameter berikutnya: textFieldId. Setelah kita memiliki ketiga method di atas. Kita tambahkan baris-baris berikut pada method commandAction.println(result[loop]). // Create splitted string array String[] result = new String[nodes.size(). new Thread(thread). // write post-action user code here } Yang paling penting dalam potongan program di atas adalah isi parameter HttpThread. loop < nodes. Jadi kita akan membaca data pelanggan dengan id sesuai isi pada textField.addElement(original). klik kanan okCommand1 pada Assigned Resources (sebelah kanan Device Screen). pada syarat untuk tombol yang berlabel Edit (pada kasus saya.size() > 0) { for (int loop = 0.// Get the last node nodes. if (nodes. new String[]{textFieldId. method split() digunakan untuk memecah sebuah String menjadi beberapa sub String berdasarkan pemisah berupa String tertentu.println("Http Result: " + httpResult). this).size()].

java. Seperti gambar berikut: . ada berapa idpelanggan yang Anda masukkan? Ingat-ingat salah satu idpelanggan tersebut dan coba masukkan ke dalam TextField Id kemudian tekan tombol Menu (di bagian bawah kanan LCD emulator Anda). Anda harus pastikan server Apache dan MySQL sudah berjalan. yaitu yang bertugas untuk menjalankan koneksi HTTP sekaligus mengembalikan hasilnya ke Main. sekarang saatnya kita coba menjalankan program kita. Bagaimana hasilnya? Menarik bukan? Coba cek dengan PhpMyAdmin. Berikutnya. Tapi tak masalah. Kemudian tekan tombol Action yang berada di tengah tombol panah kanan-kiri-atas-bawah. kemudian pilih Run. Mungkin Anda perlu menunggu beberapa detik hingga Wireless Toolkit (emulator ponsel Java) muncul. Ini sudah kita bahas di awal tutorial ini. silakan klik kanan Project Anda. toh Anda sudah cukup mengerti cara kerjanya bukan? Baik. bagaimana menjalankan program J2ME dengan Netbeans. baris yang dibutuhkan hanyalah baris program berwarna biru.Sebenarnya pada kode sumber di atas. Akan muncul pesan yang intinya berisi permintaan ijin Anda untuk melakukan koneksi jaringan internet. Sebelumnya. Anda ingat bukan. Test jalankan program Anda Hingga tahap i`ni Anda sudah memiliki modul server dan modul client (meskipun tetap bukan sebuah aplikasi yang lengkap karena fungsi yang jalan hingga saat ini di modul client hanyalah fitur READ).

getString() + "||" + textFieldName. Ini karena kita memang belum menambahkan proses apapun kepada command tersebut. Kita bisa mengedit data-data tersebut di TextField. tetapi ketika kita menekan tombol/Command Simpan (kita sudah menambahkan command okCommand2 yang bertuliskan Simpan.getString() + "||" + . Pada bagian sebelumnya. bagaimana hasilnya? Bagaimana memodifikasi program ini? Saya sudah memberikan petunjuk cukup banyak. Nah…. Apa yang ingin Anda tambahkan? Menambahkan fitur simpan pada modul client Hingga tahap ini. Ingat. new String[]{ textFieldId. Jika tidak maka program kita tidak bisa menghubungi server. Dalam hal ini fitur yang ditambahkan adalah menyimpan data pelanggan yang sudah diubah. Tapi hanya sebatas jalan. Aplikasi ini akan semakin sempurna seiring waktu. tetapi belum menambahkan proses apapun dalam event-nya) kita tidak mendapatkan apa-apa. kita sudah memiliki fitur membaca dan menampilkan data seorang pelanggan.Anda harus mengijinkannya dengan menjawab Yes. Tambahkan baris program berikut ini: HttpThread thread = new HttpThread("UPDATE". kita akan bahas bagaimana jika Anda ingin menambahkan fitur lain. Data-data tersebut kita tampilkan dalam TextField. Klik kanan pada okCommand2 (dalam Screen Editor) kemudian pilih Go To Source. Baik. aplikasi ini masih jauh dari sempurna. Meskipun ini proses yang sederhana. aplikasi kita sudah jalan. Saatnya Anda mengembangkan kreatifitas Anda. tetapi kenyataannya cukup banyak yang akan kita tambahkan. saya tidak bilang bugs free. Baik kita mulai saja.

kita memiliki fitur READ yang hanya menggunakan 1 parameter berupa String angka(integer) saja. UrlEncoder. Misalnya mengubah spasi menjadi %20. Tetapi bagaimana dengan HttpThread. switch (ch) { case '<': .java /** * * @author Amri Shodiq */ public class UrlEncoder { public static String urlEncode(String sUrl) { StringBuffer urlOK = new StringBuffer(). Sedikit ya. i++) { char ch = sUrl.textFieldAddress. penambahan ini berlaku kepada Main.getString() + "||" + textFieldBillValue. Maka kita perlu mengimplementasikan URL Encoder. for (int i = 0. this). koma atau yang lain? Ternyata kode program kita berresiko menimbulkan Exception alias error karena HTTP request menjadi tidak valid jika mengandung karakter tertentu seperti spasi.getString() + "||" + textFieldNotes. Betul. saya buat sebuah class baru bernama UrlEncoder yang memiliki satu fungsi static (bisa dipanggil tanpa harus membuat instance objectnya).java.start(). i < sUrl. penambahan pada Main.java memang tidak banyak. URL Encoder berfungsi untuk mengubah String biasa menjadi String URL yang valid.charAt(i).getString() }. new Thread(thread). di bawah baris program berikut (yang ditambahkan otomatis oleh Netbeans). Solusinya.length(). Bagaimana jika parameternya berrupa String yang mengandung spasi.java? Apakah perubahan yang perlu dilakukan? Sebelumnya. } else if (command == okCommand2) { // write pre-action user code here Jangan salah ya.

break. case ':': urlOK. con = (HttpConnection) Connector.append("%3A"). Tidak banyak.urlOK.urlEncode( "function=" + command + "&parameters=" + parameters[0])). default: urlOK. } } Class ini kemudian saya gunakan di class HttpThread. case '>': urlOK. break.java untuk melihat method setHttpResult().php?" + UrlEncoder. case '/': urlOK. break. case ' ': urlOK. Saya melakukan perubahan pada proses instansiasi koneksi HTTP variable con. .append(ch). Di sini akan kita lakukan penambahan.append("%2F"). Kita tinggalkan dulu HttpThread dan kembali ke Main. break. karena ada penambahan fitur.append("%3C"). } } return urlOK.append("%2D"). Perubahan tersebut ditandai dengan warna hijau. break.open( "http://" + server + "/Tutorial/function. break.append("%20").toString(). case '-': urlOK.append("%3E"). break.

Bagaimana menambahkan pemberitahuan tersebut? Gunakan class Alert baik ketika response dari server berhasil maupun gagal. if (httpResult. 2.Ingat. … } else if (currentFunction. yaitu READ.equals("UPDATE")) { … } 4. yang berpengaruh pula pada HttpThread karena memanggil method ini. Fitur ini tidak perlu menampilkan data yang sedang diupdate. 3. method tersebut sebelumnya hanya menangani satu fitur. tetapi justru harus diakhiri dengan pemberitahuan apakah proses UPDATE berhasil atau gagal (gagal bisa karena memang server mengembalikan pesan gagal. currentFunction = function. Deklarasinya sebagai berikut (di bawah deklarasi httpResult): private String currentFunction = "". yaitu currentFunction. misalnya alamat server tidak ada atau server mati). Kita akan menambahkan fitur lain. misalnya idpelanggan tidak terdaftar. Mengubah deklarasi method setHttpResult. Perhatikan potongan program berikut ini: } else if (currentFunction.equals("UPDATE")) { System. atau gagal karena koneksi ke server tidak berhasil. Menambahkan sebuah variable di bawah class Main.out. yaitu UPDATE (digunakan untuk menyimpan perubahan data pelanggan). "##"). Tidak demikian dengan fitur UPDATE. Ada perbedaan antara fitur READ dengan UPDATE. Fitur READ diakhiri dengan menampilkan data yang sedang dibaca. Memberlakukan syarat untuk masing-masing fitur (READ dan UPDATE). Menambahkan proses untuk fitur UPDATE. String function) { dan memasukkan function ke dalam variable currentFunction ketika method ini dipanggil. menjadi: public void setHttpResult(String string. httpResult = string. if (currentFunction.equals("1")) { . Implementasinya: 1.println("Http result: "+httpResult).equals("READ")) { String[] result = split(string.

ERROR). try{ … } catch (IOException ex) { System. Ini terjadi karena interface ThreadListenable tidak memiliki method setCurrentDisplay().java public void setCurrentDisplay(Displayable disp).". Tambahkan method berikut dalam ThreadListenable. AlertType.getDisplay(this).setTimeout(Alert. Penambahan itu berlaku pada statement catch yang ada di HttpThread.setTimeout(Alert. null.setCurrentDisplay(alert). Display. "Data berhasil disimpan. Menambahkan method setCurrentDisplay() di interface ThreadListenable dan class Main Ketika Anda menambahkan baris-baris program di atas. kita perlu memberi tahu pengguna jika terjadi kegagalan.FOREVER). server sedang down.setCurrent(disp). termasuk jika modul client ini gagal menghubungi server misalnya karena pulsa habis. Kita akan menambahkannya sekarang. } else { Alert alert = new Alert("Gagal". .ERROR). alert. alert.setCurrent(alert). null. Netbeans akan menunjukkan adanya kesalahan pada kode sumber program. parent.getDisplay(this). Juga tambahkan method berikut di akhir Main.println(ex.".Alert alert = new Alert("Berhasil". Menambahkan pesan kegagalan ketika terjadi Exception di class HttpThread Seperti sudah saya katakan pada point sebelumnya.FOREVER).out.getDisplay(this).java public void setCurrentDisplay(Displayable disp) { Display.setTimeout(Alert. alert. } } 5.getMessage()). "Koneksi dengan server gagal. } 6.FOREVER).setCurrent(alert). "Penyimpanan data gagal. Display. AlertType. dll. AlertType.". Alert alert = new Alert("Gagal". null.INFO). alamat server salah.

Sebaiknya Anda download file kode program tersebut agar Anda mendapatkan gambaran yang lebih baik tentang isi tutorial ii. Edisi ini adalah edisi pertama ebook ini. dll. Jalankan program ini. Coba Anda ubah isi salah satu atau lebih field-fieldnya. Anda sudah bisa mengetes-nya sekarang. alamat. Kemudian tekan command Simpan di emulator. coba matikan server Apache Anda. Penambahan fitur yang lainnya mungkin tidak akan memerlukan usaha sebanyak ini. Saya sadar. Penutup Buku ini dilengkapi dengan kode sumber program sebagai lampiran. sampai tahap ini Anda sudah mampu menambahkan fitur lain ke dalam aplikasi ini. ebook ini masih jauh dari sempurna. Tekan command Edit. Jika hasilnya sudah tampil lengkap nama.com. saran maupun pertanyaan yang ditujukan kepada saya berkaitan dengan meteri di dalam ebook ini. dan ebook ini sangat terbuka untuk penambahan dan penyempurnaan. semoga tulisan saya yang sederhana ini dapat membantu kerja Anda. Muncul pesan kegagalan bukan? Nah. Silakan layangkan kritik. Terima kasih.shodiq@gmail. Kemudian lakukan test sekali lagi. Apa yang terjadi? Sudah menampilkan pemberitahuan proses berhasil atau gagal bukan? Sekarang. amri. Saya akan sangat menghargai masukan Anda. . saran maupun pertanyaan Anda ke email saya. 6 perubahan sudah kita lakukan pada project kita. Coba baca idpelanggan yang sudah terdaftar di database Anda.} Selesai. Saya akan sangat menghargai kritik.

Sign up to vote on this title
UsefulNot useful