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

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

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

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

Klik pada komponen yang ingin ditambahkan event-nya. Menggunakan Easy Eclipse for PHP 1. instalasi plugins-plugins ini kadang menjadi masalah karena ada beberapa yang cukup sukar. Melainkan komponen tersebut ditambahkan karena suatu tujuan.2. Easy Eclipse sebenarnya adalah pemaketan kembali Eclipse IDE project. Kita bisa menambahkan plugins lain dengan cukup mendownload dari plugins directory di website Easy Eclipse. Sayangnya. Setelah Anda tekan Run. kemudian mengklik dua kali file plugins tersebut layaknya file executable. Eclipse terkenal dengan banyaknya plugins untuk berbagai keperluan. Nah. Klik kanan. 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. Kemudian pada pop up menu yang muncul. Menjalankan program Menu: Klik kanan nama project | Run Untuk mencoba menjalankan prototype software yang kita bangun. kemudian pilih Go To Source pada pop up menu yang muncul. tunggu sebentar.2. misalnya: tombol Exit Command ditambahkan untuk keluar dari program. . Berikutnya Anda akan dihadapkan pada Source Code Editor dimana Anda dipersilakan menambahkan kode program yang Anda inginkan.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 dipaket dalam bentuk yang mudah diinstall. caranya mudah sekali. Klik kanan pada nama project kita di Project Naviagator window (sebelah kiri). Caranya mudah sekali. pilihlah Run. Untuk keperluan tersebut. maka kita perlu menambahkan event click pada komponen tersebut. Salah satunya adalah plugins untuk coding PHP dengan Eclipse.

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

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

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

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

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

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

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

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

if (!$link) { die('Koneksi database gagal: ' . ''). } mysql_select_db("tutorial") or die("Database tidak dapat dibuka. // Koneksi ke database MySQL $link = mysql_connect('localhost'. mysql_error()). Langkah ini gunanya adalah agar nanti jika saya mengetikkan http://localhost/Tutorial/function.conf Perintah di atas berfungsi untuk membuka Kate (text editor sederhana di Kubuntu) dengan mode admin (root). lokasi projek saya ditulis 2 kali. 'root'.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.d/apache2 restart Sampai tahap ini. maka script PHP yang dijalankan adalah /home/pokemon/Projects/Tutorial/function.").3.deny Allow from all LanguagePriority en cs de es fr it nl sv pt-br ro ForceLanguagePriority Prefer Fallback 4. (Anda yang pengguna Xampp di Windows tidak perlu melakukan langkah ini) $ sudo kate /etc/apache2/apache2. Sampai tahapan ini. Perhatikan di atas.php. 5. Function. Jangan salah ya. Jika tidak berhasil. maka mestinya koneksi dengan MySQL sudah benar. 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 akan muncul pesan Database tidak dapat dibuka. Mengubah file konfigurasi Apache agar bisa mendeteksi projek baru saya.php sudah diakses dan jika tidak ada pesan error ketika kita buka dengan Browser. kita sudah memiliki koneksi ke skema database tutorial. . function.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.