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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful