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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful