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.

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

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

Klik kanan pada title bar form. Menambahkan komponen ke atas form Menu: Klik kanan | New/Add | Text Field. kemudian New/Add | Ok Command dan command-command lain yang Anda butuhkan. Mudah bukan? Jika sudah. buatlah flow dari form ke Mobile Device.• • • 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. dll atau View | Editors | Screen . Sayang. Sekarang. Sekarang Anda sudah tahu bagaimana membuat flow dari Mobile Device ke form. Anda belum member komponen apapun di atas form. berarti saat ini jika program dijalankan maka yang akan muncul adalah tampilan form.

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

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

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

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

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

maka ada beberapa kemungkinan: 1. nyalakan xampp-control. tampilan pada PHP Browser akan seperti ini: Solusi masalah ini sederhana saja. Jika Anda menggunakan Xampp (dalam Windows).exe Akan muncul tampilan seperti berikut. nyalakan web server Anda. 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. <lokasi-instalasi-xampp>/xampp-control.http://localhost/<project-Anda>/<file-yang-sedang-Anda-edit> Sekiranya ada masalah. Setting project Anda salah .exe. Web server Anda mati Gejalanya. 2.

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

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

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

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

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

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

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

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

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

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

Detilnya.io. import javax.java. import javax.io. Begitulah ringkasnya. this. import java. ThreadListenable parent = null. silakan baca terus tutorial ini.IOException.Class Connector diperlukan untuk membuat object HttpConnection pada J2ME.microedition. ThreadListenable parent) { // command digunakan untuk menentukan fungsi apa yang // akan dipanggil this.microedition.io. // parameters digunakan untuk memberikan parameter fungsi tersebut this.InputStream. String[] parameters. } public void run() { HttpConnection con = null.parent = parent. 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) . import java.ByteArrayOutputStream. String[] parameters = null. import java.HttpConnection.io.command = command. String server = "localhost".io. InputStream is = null.Connector. public HttpThread(String command. /** * * @author Amri Shodiq */ public class HttpThread implements Runnable { String command = "". HttpThread.parameters = parameters.

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

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

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

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. split() Method ini berfungsi untuk memecah sebuah string berdasarkan separator yang ditentukan dalam parameternya.java: private String httpResult = "".java seperti: 1. private CustomerRecord currentCustomer = null.

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

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

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

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. sekarang saatnya kita coba menjalankan program kita. Ini sudah kita bahas di awal tutorial ini. Bagaimana hasilnya? Menarik bukan? Coba cek dengan PhpMyAdmin. Sebelumnya. baris yang dibutuhkan hanyalah baris program berwarna biru.Sebenarnya pada kode sumber di atas. Kemudian tekan tombol Action yang berada di tengah tombol panah kanan-kiri-atas-bawah. toh Anda sudah cukup mengerti cara kerjanya bukan? Baik. Akan muncul pesan yang intinya berisi permintaan ijin Anda untuk melakukan koneksi jaringan internet. silakan klik kanan Project Anda. bagaimana menjalankan program J2ME dengan Netbeans. kemudian pilih Run.java. Tapi tak masalah. Anda ingat bukan. Berikutnya. 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). yaitu yang bertugas untuk menjalankan koneksi HTTP sekaligus mengembalikan hasilnya ke Main. Mungkin Anda perlu menunggu beberapa detik hingga Wireless Toolkit (emulator ponsel Java) muncul.

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful