P. 1
Tutorial J2ME Client Server Database

Tutorial J2ME Client Server Database

|Views: 194|Likes:

More info:

Published by: Arrummaisha Adrifina on Jul 30, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/15/2015

pdf

text

original

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->