Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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:
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.
Mana yang akan kita gunakan? Karena tutorial ini ditujukan untuk pemula dan
intermediate (bukan expert), maka kita akan mencoba membuat sesuatu yang
mirip dengan Web Service, hanya saja jauh lebih sederhana. Kita akan membuat
aturan main sederhana yang melibatkan J2ME sebagai client dan web server.
Saya memilih PHP untuk digunakan sebagai server kita. Kenapa tidak Java
(Servlet atau JSP)? Alasannya mudah saja, saya tidak menemukan layanan
hosting yang menyediakan Java, hampir semua layanan hosting yang saya temui
menggunakan PHP. Maka saya menggunakan PHP untuk menghilangkan resiko
nantinya scenario ini tidak jalan hanya karena tidak ada server yang bisa
mengimplementasikan server side script saya.
Lalu mengapa hosting? Jawabannya mudah. Saya tidak punya server sendiri yang
bisa diakses dari internet. Ya, perlu hosting kan? Karena dengan ponsel nantinya
kita tidak bisa menggunakan localhost. Localhost hanya berjalan di emulator.
Kita juga tidak bisa menggunakan IP local dalam satu network (misalnya kita
bekerja di LAN) karena belum banyak ponsel yang mendukung WiFi, selain juga
area penggunaannya jadi sangat terbata, di luar scope kasus kita yang akan
menggunakan aplikasi ini di lokasi pelanggan.
Perintah ini saya gunakan dengan Ubuntu 9.04 dan nampaknya juga kompatibel
dengan versi-versi yang lain. Perintah tersebut digunakan untuk mendownload
langsung Apache2, MySQL dan PHP5, sekaligus menginstallnya di sistem kita.
4. Sebuah mekanisme remote procedure call atau fungsi di server yang bisa dipanggil dari
client
Untuk memudahkan penyebutkan konsep ini, saya sebut saja sebagai remote procedure
call. Yang kita lakukan melalui remote procedure ini adalah insert, update dan delete.
Yang perlu Anda lakukan untuk membuat project J2ME baru adalah mengklik File | New
Project, kemudian dari dialog yang muncul pilih J2ME Project
Berikan nama yang baik, dan seterusnya. Secara default, Anda akan mendapatkan file Main.java
yang berupa Visual Midlet (buat jika tidak ada). Dengan Visual Midlet, Anda bisa membuat flow
aplikasi J2ME dengan cara drag and drop.
Netbeans Mobility dilengkapi dengan Flow Editor untuk mengedit urutan jalannya aplikasi J2Me
nantinya. Agar lebih mudah, perhatikan ketika kita menambahkan sebuah Form.
Untuk menambahkan sebuah Form, klik kanan pada Flow View, pilih New/Add | Form. Drag
sebuah flow dari Mobile Device (Midlet) ke form, atau apapun nama yang Anda berikan untuk
Form yang baru Anda tambahkan (defaultnya form). Jika Anda tidak terbiasa dengan istilah
drag, lakukan sebagai berikut:
• 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.
Klik kanan pada title bar form, kemudian New/Add | Ok Command dan command-command
lain yang Anda butuhkan.
Sekarang Anda sudah tahu bagaimana membuat flow dari Mobile Device ke form. Sekarang, buatlah
flow dari form ke Mobile Device. Mudah bukan?
Jika sudah, berarti saat ini jika program dijalankan maka yang akan muncul adalah tampilan form.
Sayang, Anda belum member komponen apapun di atas form.
Nah, Anda sudah bisa menambahkan komponen yang Anda perlukan. Coba tambahkan lima
buah TextField dan tiga buah Command hingga hasilnya seperti gambar di atas. Mudah bukan?
Menambahkan kode program pada event tertentu
Menu: Klik kanan pada component | Go To Source
Menjalankan program
Menu: Klik kanan nama project | Run
Nah, Easy Eclipse dipaket dalam bentuk yang mudah diinstall. Kita bisa menambahkan plugins
lain dengan cukup mendownload dari plugins directory di website Easy Eclipse, kemudian
mengklik dua kali file plugins tersebut layaknya file executable.
Jika Anda sudah mendownload file instalasinya, Anda bisa menginstall dengan cukup mudah.
Pengguna Windows cukup mengklik dua kali file tersebut dari Windows Explorer kemudian
mengikutinya seperti instalasi aplikasi Windows pada umumnya. Sedangkan pengguna Linux,
bisa menggunakan Easy Eclipse versi Linux. Versi Linux adalah file-file yang terkompresi saja,
jadi Anda cukup mengekstrak file yang Anda download. Anda bisa langsung menjalankan file
eclipse (file binary) dengan mengklik-nya dua kali, jika di system Anda sudah terinstal Java
Runtime.
Pada dialog New PHP project isikan Project name bebas (buat yang sesuai dengan project yang
Anda kerjakan; misalnya tutorial) dan direktori yang benar pada Location. Nama project akan
menjadi nama direktori aplikasi web kita. Dalam hal ini nantinya saya bisa browsing dengan
browser saya ke alamat http://localhost/Tutorial/.
Jika Anda menggunakan Windows, silakan Browse saja ke lokasi/direktori root directory Xampp
(direktori ini mengandung htdocs; misalnya: c:/xampp/htdocs).
Sedangkan jika Anda menggunakan Linux, silakan buat direktori baru di home direktori Anda
kemudian tambahkan entry virtual directory pada file konfigurasi web server, httpd.conf.
Rekomendasi dari saya (untuk pengguna Ubuntu, dan Linux yang lain mungkin), lakukan dengan
urutan sebagai berikut:
1. Buat direktori Projects, tepat di bawah home directory Anda (jika username Anda
adalah pokemon, maka home directory Anda adalah /home/pokemon). Jadi akan ada
direktori baru dengan path /home/pokemon/Projects.
2. Edit file konfigurasi Apache (httpd.conf). Tambahkan entry virtual directory.
3. Isikan /home/pokemon/Projects pada Location (di dialog New PHP project). Kemudian
klik check Use default location agar Anda tidak perlu mengulang langkah ini pada
project-project berikutnya.
Klik Finish.
Di bagian sebelah kiri, Anda bisa melihat Project Navigation. Di sana, Anda bisa melihat project-
project Anda. 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.
Bagian tengah IDE (yang berwarna abu-abu) adalah editor. Kita akan mengedit file-file PHP kita
di sini.
Di bagian kanan, pada tab Outline kita bisa melihat fungsi-fungsi yang kita buat nantinya di
sana.
Di bagian bawah IDE, Anda bisa melihat browser untuk preview pekerjaan Anda secara
realtime. Jadi ketika Anda save file PHP Anda, preview-nya akan muncul di bagian tersebut.
Masukkan File name yang Anda inginkan (default: file.php) dan biarkan lokasi Container-nya.
Lokasi Container ini relative terhadap workspace (yang Anda set pada Location di langkah
sebelumnya).
Anda dapat mengubah default template ini melalui menu Window | Preferences | PHPeclipse |
PHP | Code Templates. Akan muncul dialog seperti ini:
Untuk menambahkan variabel atau melakukan yang lainnya, klik saja Edit.
Anda bisa mulai menuli kode program Anda tepat di bawah penutup komentar (*/
). Saya juga umumnya menghapus baris berikut:
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
Setelah Anda melakukan beberapa perubahan pada kode sumber program Anda, selalu simpan
dengan menekan tombol Ctrl+S. Lakukan ini secara rutin.
Solusi masalah ini sederhana saja, nyalakan web server Anda. Jika Anda menggunakan
Xampp (dalam Windows), nyalakan xampp-control.exe.
<lokasi-instalasi-xampp>/xampp-control.exe
Akan muncul tampilan seperti berikut. 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.
Klik PHP Project Settings. Pilih radio button Use workspace settings kemudian klik
Configure Workspace Settings … Pada window Preferences yang muncul, isikan
http://localhost pada Localhost dan masukkan <lokasi-instalasi-xampp>/htdocs pada
DocumentRoot. Pada kasus saya, isinya adalah C:/xampp/htdocs. Klik Apply kemudian
OK.
Jika setting sudah OK, maka setiap Anda men-save perubahan yang Anda buat, maka Anda bisa
melihat preview-nya di PHP Browser.
Skenario
Begini rencananya. Nanti, kita akan membangun skema database (lengkap dengan table-table-
nya) di mana kita bisa melakukan fungsi-fungsi insert-read-update-delete. Saya berikutnya akan
buat 4 fungsi dengan script PHP dalam sebuah file saja, yaitu function.php. Fungsi-fungsi
tersebut antara lain, insertCustomerData(), readCustomerData(), updateCustomerData(), dan
deleteCustomerData().
Keempat fungsi tersebut tentunya harus melakukan fungsinya dengan baik, yaitu mengacak-
acak database, tentu saja. Nah, kemudian, saya harus juga menyediakan suatu cara agar fungsi-
fungsi tersebut bisa diakses dengan ponsel. Maka saya sediakan sebuah listener dengan PHP
untuk mendengarkan, jika ada permintaan fungsi, maka function.php akan mengecek, apakah
fungsi yang diminta terdapat di sistem atau tidak. Jika ya, cek lagi, apakah parameternya
lengkap atau tidak. Jika ya, jalankan fungsi yang diminta, kemudian berikan hasilnya kepada
peminta.
Peminta (dalam hal ini pengirim HTTP Request) yang saya maksud adalah ponsel. Nah, sampai
pada point ini sisi server sudah selesai.
Saya kemudian akan membuat fungsi/method dengan J2ME untuk memanggil keempat fungsi
tersebut. fungsi tersebut adalah pemetaan dari tiap fungsi server, berikut parameternya. Di
tahap ini, materi sudah berpindah kea rah pengembangan modul client. Setiap method
tersebut nantinya akan dikirimkan dengan format tertentu ke server menggunakan protokol
HTTP. Berarti juga, saya harus membuat method untuk mengirimkan data apapun melalui
protokol HTTP. Setelahnya, saya juga harus menambahkan fungsi untuk parsing data dari
ponsel ini di sisi servernya (function.php).
Hasil dari server akan dikembalikan ke ponsel dalam bentuk HTTP Response dari request yang
dikirim. Dalam format tertentu pula. Maka, pada ponsel pun harus disiapkan method untuk
parsing response dari server ini.
Terakhir, saya harus membuat tampilan program di ponsel untuk simulasi program ini. Ini
mudah sekali dilakukan dengan Netbeans 6.5 yang mempunyai fitur Visual MIDlet.
Sebenarnya saya ingin menggunakan tool MySQL Query Browser untuk melakukannya, karena
saya rasa ini tool yang cukup baik. Memang untuk keperluan ini, MySQL Query Browser
bukanlah pilihan yang terbaik. Masih ada MySQL Yog, MySQL Front dan Heidi SQL. Saya suka
MySQL Query Browser sebab tools ini dibuat sendiri oleh si produsen MySQL, www.MySQL.net.
Namun ada sedikit masalah, ketika saya menjalankan MySQL Query Browser, saya tidak bisa
terhubung ke database MySQL di localhost. Padahal saya sudah nyalakan servicenya. Hmm...
aneh. Saya coba tool lain deh, mungkin PhpMyAdmin. Tapi saya harus download aplikasi ini,
hiks. Karena saat ini saya menggunakan Ubuntu, maka saya gunakan APT-GET, tools untuk men-
download sekaligus menginstall aplikasi. APT-GET berfungsi seperti Add/Remove Programs
pada Windows, bedanya APT-GET berjalan pada console dan mampu memperoleh paket-paket
software dari internet. Begini caranya:
Untuk pengguna Xampp di WIndows, Anda boleh gembira karena PhpMyAdmin sudah
menyediakannya untuk Anda.
Nah sekarang, anggap saja kondisinya, saya sudah punya Apache HTTPD, MySQL dan PHP, juga
PhpMyAdmin. Meskipun entah kenapa, MySQL Query Browser saya masih error. Tidak masalah.
Saya akan betulkan nanti. Hal pertama yang saya lakukan adalah membuat database-nya
seperti yang dibicarakan tadi.
Saya membuat sebuah skema database dengan nama tutorial. Kemudian saya langsung
membuat table di dalamnya dengan nama datapelanggan dengan jumlah field 5. Field-field
yang dibuat antara lain: idpelanggan (INT), nama (VARCHAR[50]), alamat (TEXT), tagihan (INT),
dan catatan (TEXT).
Tabel di atas di buat menggunakan PhpMyAdmin. Nampaknya tools ini adalah tools yang paling
populer untuk mengelola database MySQL. Mudah-mudahan Anda sudah cukup mengenalnya.
Setelah saya Save skema tersebut, saya akan melanjutkan dengan membuat file PHP untuk
servernya.
Menulis function.php
Semoga Anda masih ingat dengan rencana saya. Ya, saya akan membuat sebuah script PHP
dengan nama function.php di dalam project Tutorial. Karena saat ini saya memakai Linux dan
installasi Apache-nya menggunakan APT. Maka ini yang saya lakukan:
1. Membuat direktori Tutorial dalam direktori Projects (direktori tempat saya menyimpan
proyek-proyek PHP saya. Jika Anda ingat sub bab yang membahas penggunaan Easy
Eclipse, workspace saya ada di /home/pokemon/Projects. Pokemon adalah username
saya di system operasi. Jadi, lokasinya kurang lebih seperti ini:
home/pokemon/Projects/Tutorial.
2. Membuat file function.php di dalam direktori tersebut. Di dalamnya saya membuat
kerangka fungsi-fungsi yang dibutuhkan dan menambahkan koneksi ke MySQL yang
sederhana di awalnya, dan ditutup di akhir file. Dalam kerangkan ini, fungsi-fungsi masih
kosong, begitu juga dengan bagian untuk menangani HTTP Request GET.
<?php
// Fungsi-fungsi
function listCustomerData() {
}
function readCustomerData($idPelanggan) {
}
function deleteCustomerData($idPelanggan) {
}
// Menutup koneksi
mysql_close($link);
?>
3. Mengubah file konfigurasi Apache agar bisa mendeteksi projek baru saya. (Anda yang
pengguna Xampp di Windows tidak perlu melakukan langkah ini)
Perintah di atas berfungsi untuk membuka Kate (text editor sederhana di Kubuntu)
dengan mode admin (root). Saya tambahkan entry berikut ini
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en cs de es fr it nl sv pt-br ro
ForceLanguagePriority Prefer Fallback
4. Perhatikan di atas, lokasi projek saya ditulis 2 kali. Langkah ini gunanya adalah agar nanti
jika saya mengetikkan http://localhost/Tutorial/function.php, maka script PHP yang
dijalankan adalah /home/pokemon/Projects/Tutorial/function.php. Jangan salah ya.
Sampai tahap ini, function.php sudah diakses dan jika tidak ada pesan error ketika kita buka
dengan Browser, maka mestinya koneksi dengan MySQL sudah benar.
Function.php saya lengkapi dengan baris program yang meminta PHP untuk menggunakan
skema database tutorial.
// Koneksi ke database MySQL
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Koneksi database gagal: ' . mysql_error());
}
mysql_select_db("tutorial") or die("Database tidak dapat dibuka.");
Sampai tahapan ini, kita sudah memiliki koneksi ke skema database tutorial. Jika tidak berhasil,
misalnya skema database belum dibuat, maka akan muncul pesan Database tidak dapat
dibuka.
Melengkapi fungsi-fungsi utama
Berikutnya, saya melengkapi program kita dengan fungsi-fungsi yang sudah dijanjikan pada
bagian awal, yaitu untuk insert, read, update dan delete data dalam tabel. Oh ya, sebagai
tambahan, saya juga berikan fungsi untuk menmperlihatkan daftar lengkap pelanggan. Fungsi
ini (listCustomerData()) saya tambahkan terakhir tetapi saya tulis paling awal. Jangan bingung
ya. Silakan perhatikan kode program berikut:
function listCustomerData() {
global $link;
$sql = "SELECT idpelanggan, nama FROM datapelanggan";
$result = mysql_query($sql);
if ($result) {
if (mysql_num_rows($result)) {
$data = array ();
while ($row = mysql_fetch_assoc($result)) {
$buffer = array (
"id" => $row["idpelanggan"],
"nama" => $row["nama"]
);
array_push($data, $buffer);
}
} else {
// Data tidak ditemukan
$error = 2;
}
} else {
// Query SQL gagal
$error = 1;
}
$result = array (
"errorcode" => $error,
"data" => $data
);
}
function readCustomerData($idPelanggan) {
global $link;
$error = 0;
$data = array ();
$sql = "SELECT idpelanggan, nama, alamat, tagihan, catatan FROM
datapelanggan
WHERE idpelanggan='$idPelanggan'";
$result = mysql_query($sql);
if ($result) {
if (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
$data = array (
"id" => $row["idpelanggan"],
"nama" => $row["nama"],
"alamat" => $row["alamat"],
"tagihan" => $row["tagihan"],
"catatan" => $row["catatan"]
);
}
} else {
// Data tidak ditemukan
$error = 2;
}
} else {
// Query SQL gagal
$error = 1;
}
$result = array (
"errorcode" => $error,
"data" => $data
);
return $result;
}
function deleteCustomerData($idPelanggan) {
global $link;
$sql = "DELETE FROM datapelanggan WHERE idpelanggan='$idPelanggan'";
$result = mysql_query($sql);
return $result;
}
}
}
break;
case "UPDATE" :
{
if (isset ($_GET["parameters"])) {
$parameters = explode("||", $_GET["parameters"]);
if (count($parameters) == 5) {
$result = updateCustomerData($parameters[0],
$parameters[1], $parameters[2], $parameters[3],
$parameters[4]);
echo $result;
} else
echo 3;
// 3 adalah error code parameter tidak cocok
}
}
break;
case "DELETE" :
{
if (isset ($_GET["parameters"])) {
$parameters = $_GET["parameters"];
$result = deleteCustomerData($parameters);
echo $result;
}
}
break;
}
}
Selesai sudah script PHP sebagai server aplikasi kita. Apakah Anda melihat ada yang kurang?
Jika Anda melihatnya, berarti Anda memperhatikan. Tetapi saya kurang yakin. Nah jika Anda
menemukan kekurangannya, silakan kirim email kepada saya (alamat ada di bawah judul
ebook).
Anda bisa mengeceknya dengan mengetikkan URL berikut ini ke address bar browser Anda:
• http://localhost/Tutorial/function.php?function=INSERT¶meters=Nunik%20
Yulianingsih||Perumahan%20Kurnia%20Alam%20Permai%20Blok%20E%20No%
209%20Depok||150000||Lunas
• http://localhost/Tutorial/function.php?function=UPDATE¶meters=1||Nunik
%20Kutoarjo%20Yulianingsih||Perumahan%20Kurnia%20Alam%20Permai%20Bl
ok%20E%20No%209%20Depok||150000||Lunas
• http://localhost/Tutorial/function.php?function=READ¶meters=1
• http://localhost/Tutorial/function.php?function=DELETE¶meters=1
1. textFieldId
2. textFieldName
3. textFieldAddress
4. textFieldBillValue
5. textFieldNotes
Anda sudah paham kan bagaimana mengubah nama komponen-komponen tersebut? Mudah
saja. Pada Screen Editor, klik kanan komponen yang ingin Anda ubah namanya, kemudian pilih
Rename dari menu pop up yang muncul.
Selanjutnya, seperti pada gambar, silakan tambahkan juga 2 Ok Command dan 1 Exit Command.
Untuk melakukan koneksi HTTP ke server, kita membutuhkan pengetahuan tentang class dan
konsep Thread, class Connector, dan class HttpConnection.
Kita perlu membuat thread baru untuk melakukan koneksi dengan HTTP agar aplikasi kita tidak
blocking (terrasa seperti hang) ketika koneksi berjalan. Ya, Anda tahu kan, melakukan koneksi
jaringan kadang membutuhkan waktu tertentu.
Class Connector diperlukan untuk membuat object HttpConnection pada J2ME. Begitulah
ringkasnya. Detilnya, silakan baca terus tutorial ini.
HttpThread.java.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
/**
*
* @author Amri Shodiq
*/
public class HttpThread implements Runnable {
Perhatikan, pada kode program di atas saya berikan beberapa warna lain, untuk menunjukkan
baris-baris yang penting:
• Merah: untuk baris program yang berkaitan dengan koneksi dengan HTTP (Internet,
GPRS)
• Hijau: membaca response dari server
• Biru: mengembalikan hasil ke MIDlet (Main.java) untuk selanjutnya ditampilkan.
Dengan mengimplementasikan Interface ini kepada Main.java, artinya kita akan membuat
Main.java harus memiliki method setHttpResult(). Method ini disediakan agar HttpThread dapat
mengembalikan hasil.
Mengapa tidak langsung saja memasukkan class Main sebagai input parameter untuk
constructor HttpThread? Anda bisa saja melakukannya. Tetapi penggunaan interface di sini
dianjurkan untuk implementasi yang baik. Jika misalnya nanti aplikasi ini terdiri atas beberapa
MIDlet, kita masih dapat menggunakan HttpThread yang sama untuk menangani koneksi HTTP,
asal MIDlet tersebut mengimplementasikan interface ThreadListenable. Detilnya tidak akan
dijelaskan dalam tutorial ini.
Membuat class CustomerRecord
Class ini akan kita gunakan sebagai Bean untuk menyimpan record yang kita dapat dari HTTP
server. Kode programnya sebagai berikut. Sebentar, saya akan beritahukan satu rahasia untuk
Anda. Untuk menulis kode program di bawah ini saya hanya menulis variabel-variabelnya saja
(customerId, customerName, dll). Method-methodnya digenerate otomatis oleh Netbeans
setelah saya block variabel-variabel yang saya tulis, kemudian klik kanan. Pilih Refactor |
Encapsulate Fields. Klik tombol Select All, kemudian klik Refactor. Selesai.
public class CustomerRecord {
private int customerId = 0;
private String customerName = "";
private String address = "";
private int billValue = 0;
private String billNotes = "";
public CustomerRecord() {
}
Ini saja yang perlu Anda tulis, berikutnya Anda cukup klik kanan pada kode sumber Anda, pilih Refactor
kemudian Encapsulate Fields … pada menu pop up yang muncul. Akan muncul dialog Encapsulate Fields.
Klik tombol Select All kemudian klik tombol Refactor.
Menyelesaikan Main.java (Midlet utama)
Saya menambahkan 2 variabel di dalam Main.java:
private String httpResult = "";
private CustomerRecord currentCustomer = null;
1. split()
Method ini berfungsi untuk memecah sebuah string berdasarkan separator yang
ditentukan dalam parameternya. Kita menggunakannya karena hasil dari HTTP request
kita menggunakan format ini.
2. setHttpResult()
Method ini digunakan untuk mengupdate variabel httpResult dari HttpThread. Lebih
jauh, di akhir method ini juga mengupdate variabel currentCustomer.
3. showCurrentCustomer()
Method ini digunakan untuk menampilkan nilai variabel currentCustomer ke dalam
Form.
Jika Anda perlu melihat kode sumber lengkap aplikasi ini Anda mendownloadnya di suatu tempat. Jika
Anda hanya ingin tahu kode program yang saya tambahkan ke Main.java, perhatikan kode program di
bawah ini:
Method di atas dipanggil ketika MIDlet menampilkan isi variable currentCustomer (pelanggan yang
sedang dilihat datanya) ke dalam TextField-TextField.
Method setHttpResult() digunakan oleh HttpThread untuk mengembalikan hasil berupa response dari
server kepada Main.java (di dalam variable httpResult). Isi variable ini kemudian di-parsing untuk
mendapatkan kode error dan response server, dengan pemisah berupa ‘##’. Jika kode error bernilai 0
(yang berarti koneksi HTTP berjalan lancar), response server yang tersimpan di dalam variabel result[1]
kemudian diparsing dengan pemisah berupa ‘||’ untuk mendapatkan nilai field-field dalam response
tersebut. Setelah diparsing, field-field tersebut dimasukkan ke dalam variable text yang berrupa array.
text[0] berisi field pertama, text[1] berisi field kedua dan seterusnya.
Berikutnya kita akan menyimpan nilai field-field tersebut ke dalam variable instance dari class
CustomerRecord, yaitu currentCustomer. Langkah ini ditulis pada baris program yang ditulis dengan
warna merah.
Baris-baris program di atas dua kali memanggil method split(). Berikut adalah kode sumber method
split().
return result;
}
Seperti yang Anda lihat, method split() digunakan untuk memecah sebuah String menjadi beberapa sub
String berdasarkan pemisah berupa String tertentu.
Setelah kita memiliki ketiga method di atas, kita perlu menambahkan event yang men-trigger
pemanggilan httpThread. Kita tambahkan baris-baris berikut pada method commandAction, pada syarat
untuk tombol yang berlabel Edit (pada kasus saya, variabel tombolnya adalah okCommand1).
Kembali ke Screen Editor, klik kanan okCommand1 pada Assigned Resources (sebelah kanan Device
Screen). Pilih Go To Source. Masukkan kode berikut:
Yang paling penting dalam potongan program di atas adalah isi parameter HttpThread, yaitu
“READ” dan parameter berikutnya: textFieldId.getString(). Jadi kita akan membaca data
pelanggan dengan id sesuai isi pada textField.
Sebenarnya pada kode sumber di atas, baris yang dibutuhkan hanyalah baris program berwarna
biru, yaitu yang bertugas untuk menjalankan koneksi HTTP sekaligus mengembalikan hasilnya
ke Main.java.
Baik, sekarang saatnya kita coba menjalankan program kita. Anda ingat bukan, bagaimana
menjalankan program J2ME dengan Netbeans. Ini sudah kita bahas di awal tutorial ini.
Sebelumnya, Anda harus pastikan server Apache dan MySQL sudah berjalan. Berikutnya, silakan
klik kanan Project Anda, kemudian pilih Run. Mungkin Anda perlu menunggu beberapa detik
hingga Wireless Toolkit (emulator ponsel Java) muncul. Bagaimana hasilnya? Menarik bukan?
Coba cek dengan PhpMyAdmin, 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).
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. Seperti gambar berikut:
Anda harus mengijinkannya dengan menjawab Yes. Jika tidak maka program kita tidak bisa
menghubungi server. Nah…, bagaimana hasilnya?
Meskipun ini proses yang sederhana, tetapi kenyataannya cukup banyak yang akan kita
tambahkan. Ingat, aplikasi ini masih jauh dari sempurna.
Baik kita mulai saja. Klik kanan pada okCommand2 (dalam Screen Editor) kemudian pilih Go To
Source. Tambahkan baris program berikut ini:
HttpThread thread = new HttpThread("UPDATE", new String[]{
textFieldId.getString() + "||" +
textFieldName.getString() + "||" +
textFieldAddress.getString() + "||" +
textFieldBillValue.getString() + "||" +
textFieldNotes.getString()
}, this);
new Thread(thread).start();
Jangan salah ya, penambahan ini berlaku kepada Main.java. Sedikit ya. Betul, penambahan
pada Main.java memang tidak banyak. Tetapi bagaimana dengan HttpThread.java? Apakah
perubahan yang perlu dilakukan?
Sebelumnya, kita memiliki fitur READ yang hanya menggunakan 1 parameter berupa String
angka(integer) saja. Bagaimana jika parameternya berrupa String yang mengandung spasi,
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. Maka
kita perlu mengimplementasikan URL Encoder. URL Encoder berfungsi untuk mengubah String
biasa menjadi String URL yang valid. Misalnya mengubah spasi menjadi %20. Solusinya, saya
buat sebuah class baru bernama UrlEncoder yang memiliki satu fungsi static (bisa dipanggil
tanpa harus membuat instance objectnya).
UrlEncoder.java
/**
*
* @author Amri Shodiq
*/
public class UrlEncoder {
Class ini kemudian saya gunakan di class HttpThread. Saya melakukan perubahan pada proses
instansiasi koneksi HTTP variable con.
Kita tinggalkan dulu HttpThread dan kembali ke Main.java untuk melihat method
setHttpResult(). Di sini akan kita lakukan penambahan, karena ada penambahan fitur.
Ingat, method tersebut sebelumnya hanya menangani satu fitur, yaitu READ. Kita akan
menambahkan fitur lain, yaitu UPDATE (digunakan untuk menyimpan perubahan data
pelanggan). Implementasinya:
4. Menambahkan proses untuk fitur UPDATE. Ada perbedaan antara fitur READ dengan
UPDATE. Fitur READ diakhiri dengan menampilkan data yang sedang dibaca. Tidak
demikian dengan fitur UPDATE. Fitur ini tidak perlu menampilkan data yang sedang
diupdate, tetapi justru harus diakhiri dengan pemberitahuan apakah proses UPDATE
berhasil atau gagal (gagal bisa karena memang server mengembalikan pesan gagal,
misalnya idpelanggan tidak terdaftar, atau gagal karena koneksi ke server tidak berhasil,
misalnya alamat server tidak ada atau server mati).
Selesai. 6 perubahan sudah kita lakukan pada project kita. Anda sudah bisa mengetes-nya
sekarang. Jalankan program ini. Coba baca idpelanggan yang sudah terdaftar di database Anda.
Jika hasilnya sudah tampil lengkap nama, alamat, dll. Coba Anda ubah isi salah satu atau lebih
field-fieldnya. Kemudian tekan command Simpan di emulator. Apa yang terjadi? Sudah
menampilkan pemberitahuan proses berhasil atau gagal bukan? Sekarang, coba matikan server
Apache Anda. Kemudian lakukan test sekali lagi. Tekan command Edit. Muncul pesan kegagalan
bukan?
Nah, sampai tahap ini Anda sudah mampu menambahkan fitur lain ke dalam aplikasi ini.
Penambahan fitur yang lainnya mungkin tidak akan memerlukan usaha sebanyak ini.
Penutup
Buku ini dilengkapi dengan kode sumber program sebagai lampiran. Sebaiknya Anda download
file kode program tersebut agar Anda mendapatkan gambaran yang lebih baik tentang isi
tutorial ii.
Saya sadar, ebook ini masih jauh dari sempurna. Edisi ini adalah edisi pertama ebook ini, dan
ebook ini sangat terbuka untuk penambahan dan penyempurnaan. Saya akan sangat
menghargai kritik, saran maupun pertanyaan yang ditujukan kepada saya berkaitan dengan
meteri di dalam ebook ini.
Terima kasih, semoga tulisan saya yang sederhana ini dapat membantu kerja Anda.