Você está na página 1de 247

MOBILE APPLICATION

POLITEKNIK TELKOM
BANDUNG
2009
Politeknik Telkom Mobile Application

Tim Penulis:
Budi Laksono Putro
Dedy Rahman Wijaya

Dilarang menerbitkan kembali, menyebarluaskan, atau menyimpan baik


sebagian maupun seluruh isi buku dalam bentuk dan dengan cara apapun
tanpa izin tertulis dari Politeknik Telkom

Hak cipta dilindungi undang-undang @ Politeknik Telkom 2009

No part of this document may be copied, reproduced, printed, distributed, modified,


removed and amended in any form by any means without prior written
authorization of Telkom Polytechnic.

Copyright @ 2009 Telkom Polytechnic. All rights reserved


ii
Politeknik Telkom Mobile Application

KATA PENGANTAR

Assalamu’alaikum Wr. Wb

Segala puji bagi Allah SWT karena dengan karunia-Nya courseware ini dapat
diselesaikan.

Atas nama Politeknik Telkom, kami sangat menghargai dan ingin


menyampaikan terima kasih kepada penulis, penerjemah dan penyunting yang
telah memberikan tenaga, pikiran, dan waktu sehingga courseware ini dapat
tersusun.

Tak ada gading yang tak retak, di dunia ini tidak ada yang sempurna, oleh
karena itu kami harapkan para pengguna buku ini dapat memberikan masukan
perbaikan demi pengembangan selanjutnya.

Semoga courseware ini dapat memberikan manfaat dan membantu seluruh


Sivitas Akademika Politeknik Telkom dalam memahami dan mengikuti materi
perkuliahan di Politeknik Telkom.
Amin.

Wassalamu’alaikum Wr. Wb.

Bandung, Oktober 2009

Christanto Triwibisono
Wakil Direktur I

iii
Politeknik Telkom Mobile Application

DAFTAR ISI

KATA PENGANTAR ...................................................... iii


DAFTAR ISI .............................................................................. iv
1 INTRODUCTION J2ME.......................................... 1
1.1 Keluarga JAVA .................................................................. 2
1.2 Gambaran J2ME ................................................................ 7
1.3 Configuration ................................................................... 8
1.4 Profile ............................................................................... 8
1.5 Perangkat Mobile .............................................................. 9
1.6 Sistem Operasi untuk Alat Mobile ................................. 11
2 J2ME, J2EE DAN J2SE............................................ 21
2.1 J2ME, J2SE dan J2EE ........................................................ 22
2.2 Java 2 Micro Edition ....................................................... 23
2.3 J2ME Configuration ........................................................ 24
2.3.1 CLDC ............................................................................. 25
2.3.2 CDC 27
2.4 Java Technology for the Wireless Industry (JTWI) ...... 27
2.5 Generic Connection Framework ................................... 28
2.6 J2ME Profile .................................................................... 29
2.7 Java Community Process (JCP) ...................................... 30
2.8 MIDP............................................................................... 31
2.9 MIDlet............................................................................. 32
2.10 Siklus MIDlet .................................................................. 33
3 CLCD ....................................................................... 41
3.1 CLDC ............................................................................. 42
3.1.1 Karakteristik perangkat CLDC ...................................... 43
3.1.2 Fitur yang hilang.............................................................. 44
3.1.3 CLDC market................................................................. 45
3.1.4 Java TM Language Spesification (JLS) .............................. 46
3.1.5 Preverification dan Application Representation ............ 46
3.2 CLDC Libraries .............................................................. 47
iv
Politeknik Telkom Mobile Application

3.2.1 CLDC Libraries pewarisan dari J2SE ............................. 47


3.2.2 CLDC Libraries J2ME ..................................................... 51
3.3 CLDC System Properties............................................... 54
3.4 CLDC Networking......................................................... 54
3.5 Verifikasi Class oleh KVM .............................................. 55
4 MIDP ........................................................................ 62
4.1 Mobile Information Device Profile (MIDP) .................... 63
4.2 J2ME Security.................................................................. 65
4.2.1 Protection Domains ....................................................... 65
4.2.2 Permissions..................................................................... 65
4.2.3 Mode Interaksi User....................................................... 66
4.2.4 Anatomi dari Aplikasi MIDP ........................................... 69
4.3 MIDlet............................................................................. 70
4.3.1 Arsitektur Aplikasi MIDlet ............................................. 71
4.3.2 Siklus MIDlet .................................................................. 73
4.3.3 MIDlet suites .................................................................. 75
5 Integrated Programming Environment .................... 82
5.1 Pengenalan ...................................................................... 83
5.2 "Hello, world!" MIDlet ................................................... 83
5.3 Compilation dan Packaging MIDlets............................... 87
5.4 Menggunakan Sun Wireless Toolkit ............................... 89
5.5 Menggunakan NetBeans Mobility Pack .......................... 92
5.6 Bekerja dengan Form ................................................... 103
6 High Level User Interface I .................................... 112
6.1 MIDP User Interface .................................................... 113
6.2 Display .......................................................................... 114
6.2.1 Displayable.................................................................... 114
6.2.2 Title 115
6.2.3 Command ..................................................................... 116
6.2.4 CommandListener ........................................................ 119
6.2.5 Ticker ........................................................................... 120
6.2.6 Screen ........................................................................... 120
6.2.7 Item 121
v
Politeknik Telkom Mobile Application

6.3 Text Box....................................................................... 122


6.4 Form ............................................................................. 124
6.5 Date Field ..................................................................... 125
6.6 Image Item .................................................................... 126
6.7 Text Field ..................................................................... 128
6.8 Gauge............................................................................ 130
7 High Level User Interface II ................................... 138
7.1 ChoiceGroup ............................................................... 139
7.2 List ................................................................................ 140
7.3 Alert ............................................................................. 142
7.4 String Item .................................................................... 144
7.5 Jenis Fungsi-Fungsi API pada MIDP untuk GUI ............ 145
8 Low Level User Interface I ..................................... 151
8.1 Pengenalan .................................................................... 152
8.2 Canvas .......................................................................... 152
8.2.1 Sistem Koordinat.......................................................... 153
8.2.2 ”Hello,World!” ............................................................. 154
8.2.3 Perintah ........................................................................ 156
8.3 Grafik ............................................................................ 157
8.3.1 Warna........................................................................... 157
8.3.2 Huruf ............................................................................ 159
8.3.3 Style Coretan ............................................................... 160
8.3.4 Menggambar garis ......................................................... 160
8.3.5 Menggambar kotak ....................................................... 162
8.3.6 Menggambar Sudut ....................................................... 164
8.3.7 Melukis gambar............................................................. 166
9 Low Level User Interface II .................................... 173
9.1 Event key ...................................................................... 174
9.2 Aksi Permainan ............................................................. 174
9.3 Event Pointer ................................................................ 175
9.4 Clipping ......................................................................... 176
9.5 Anchor Points .............................................................. 176

vi
Politeknik Telkom Mobile Application

9.6 Menggambar Teks ........................................................ 177


9.7 Game API ..................................................................... 179
9.7.1 Game API ..................................................................... 179
9.7.2 Layers ........................................................................... 182
9.7.3 Sprites ........................................................................... 183
9.7.4 LayerManager ............................................................... 186
9.8 Scalable 2D Graphics ................................................... 186
10 Networking (Socket/TCP) ...................................... 192
10.1 Generic Connection Framework ................................. 193
10.1.1 Hirarki dari GCF Interface .................................. 193
10.1.2 GCF Connection URL ......................................... 194
10.2 TCP Sockets ................................................................. 195
10.3 Server Sockets.............................................................. 196
10.4 Datagrams .................................................................... 197
11 Networking (HTTP) ............................................... 206
11.1 Koneksi HTTP .............................................................. 207
11.1.1 Protokol HTTP.................................................... 207
11.1.2 Menciptakan sebuah koneksi HTTP .................... 208
11.1.3 Handling HTTP Redirects ................................... 209
11.2 Koneksi HTTPS ............................................................ 210
11.3 Servlet........................................................................... 213
11.4 HTTP Servlet ................................................................ 213
12 Persistent Storage .................................................. 221
12.1 Record Store ................................................................ 222
12.2 Record Enumeration .................................................... 229
12.3 Record Comparator..................................................... 230
12.4 Record Filter ................................................................ 231
12.5 Record Listener ............................................................ 232
Daftar Pustaka ................................................... 239

vii
Politeknik Telkom Mobile Application

1 INTRODUCTION J2ME

Overview

Java merupakan bahasa pemrograman “general purpose”, Java bisa digunakan


untuk pembuatan aplikasi web, database, grafis dan berbagai aplikasi lainnya
seperti bahasa pemrograman lainnya. Mengapa Java menjadi andalan bagi
para programmer ? Selain dukungan API yang begitu lengkap, hasil program
Java akan bisa dijalankan di semua platform selama disitu terdapat JVM (Java
Virtual Machine). Kalau seorang programmer memilih Java sebagai bahasa
untuk pengembangan aplikasinya, maka dia tidak perlu pusing memikirkan
apakah sistem operasi usernya mendukung atau tidak sehingga Java
mempunyai slogan “write once, run every where”.

Tujuan

Pada akhir bab ini, siswa diharapkan dapat menguasai :


1. Mengidentifikasi karakteristik dari perangkat mobile
2. Menjelaskan arsitektur J2ME
3. Mengetahui peran atau aturan configuration dan profile.

Intro J2ME 1
Politeknik Telkom Mobile Application

1.1 Keluarga JAVA


Sun Microsystem sebagai pengembang bahasa Java telah
mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise
Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition),
Java Card. J2EE dan J2SE dikembangkan untuk platform Server dan PC,
J2ME dikembangkan untuk platform mobile device sedangkan Java
Card untuk platform simcard. Pada dasarnya versi-versi tersebut sama,
hanya penggunaan API yang berbeda sesuai dengan target platform
yang akan digunakan dan kompatibilitas platform tersebut.

Gambar 1.1 Java Platform

2 Intro J2ME
Politeknik Telkom Mobile Application

Gambar 1.2 Berbagai versi Java dilihat dari target platformnya

 Java 2

Pada perkembangan selanjutnya, Sun Microsystem memperkenalkan


Java versi 1.2 atau lebih dikenal dengan nama Java 2 yang terdiri atas
JDK dan JRE versi 1.2. Aplikasiaplikasi java yang kompatibel dengan
Java 2 ini dikenal dengan Java 2 Compliant. Pada
Java 2 ini, java dibagi menjadi 3 kategori:
 Java 2 Standart Edition (J2SE)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada level PC (Personal Computer)
 Java 2 Enterprise Edition (J2EE)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada lingkungan entriprise dengan
menambahkan fungsionalitasfungsionalitas Java semacam EJB
(Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java
XML (Extensible Markup Language)
 Java 2 Micro Edition (J2ME)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada handled devices atau perangkat-
perangkat semacam handphone, Palm, PDA, dan Pocket PC.

Intro J2ME 3
Politeknik Telkom Mobile Application

 Java 2 Micro Edition


J2ME dirancang untuk dapat menjalankan program Java pada
perangkat-perangkat semacam handphone dan PDA, yang memiliki
karakteristik yang berbeda dengan sebuah komputer biasa, misalnya
kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas
komponen-komponen sebagai berikut :
 Java Virtual Machine (JVM)
Komponen ini untuk menjalankan program program Java pada
emulator atau handled devices.
 Java API (Application Programming Interface)
Komponen ini merupakan kumpulan librari untuk menjalankan
dan mengembangkan program Java pada handled devices.
 Tools lain untuk pengembangan aplikasi Java semacam emulator
Java Phone, emulator Motorolla.

 Java Application Programming Interface (Java API)

Gambar 1.3 Java API

4 Intro J2ME
Politeknik Telkom Mobile Application

Java API merupakan komponen-komponen dan kelas Java yang sudah


jadi, yang memiliki berbagai kemampuan. Kemampuan untuk
menangani objek, string, angka dan sebagainya

 Applet
Java Applet merupakan program Java yang berjalan di atas browser.
Penggunaan applet ini akan membuat halaman HTML lebih
dinamis dan menarik.

 Java Networking
Sekumpulan API (Application Programming Interface) yang
menyediakan fungsi – fungsi untuk aplikasi – aplikasi jaringan,
seperti penyediaan akses untuk TCP, UDP, IP Adrress dan URL.
Tetapi Java Networking tidak menyediakan akses untuk ICMP
dikarenakan alasan sekuriti dan pada kondidi umum hanya
administrator ( root ) yang bisa memanfaatkan protokol ICMP.

 Java Database Connectivity (JDBC)


JDBC API terdiri atas class dan interface yang ditulis dalam
bahasa Java untuk sebagai alat bantu bagi pembuat program
(developer) dan menyediakan sekumpulan API untuk mengatur
keamanan mengakses database seperti Oracle, MySQL,
PostgreSQL, Microsoft SQL Server. Jadi keunggulan API JDBC
dapat mengakses sumber data dan berjalan pada semua Platform
yang mempunyai Java Viortual Machine (JVM).

 Java Security
Java Security menyediakan sekumpulan API untuk mengatur
security dari aplikasi Java baik secara high level atau low level,
seperti public/private key management dan certificates.

 Java Swing
Java Swing menyediakan sekumpulan API untuk membangun
aplikasi – aplikasi GUI (Graphical User Interface) dan model GUI
yang diinginkan bisa bermacam – macam, bisa model Java, model
Motif/CDE atau model yang dependent terhadap platform yang
digunakan.

Intro J2ME 5
Politeknik Telkom Mobile Application

 Java RMI
Java RMI menyediakan sekumpulan API untuk membangun
aplikasi – aplikasi Java yang mirip dengan model RPC (Remote 4
Procedure Call) jadi object - object Java bisa di call secara remote
pada jaringan komputer.

 Java 2D/3D
Java 2D/3D menyediakan sekumpulan API untuk membangun
grafik – grafik 2D/3D yang menarik dan juga akses ke printer.

 Java Server Pages (JSP)


JSP adalah suatu teknologi web berbasis bahasa pemrograman
Java dan berjalan pada platform Java. JSP merupakan
pengembangan dari Servlet serta merupakan bagian dari
teknologi Java 2 Platform, Enterprise Edition (J2EE).

 JNI (Java Native Interface)


JNI menyediakan sekumpulan API yang digunakan untuk
mengakses fungsi – fungsi pada library (*.dll atau *.so) yang dibuat
dengan bahasa pemrograman yang lain seperti C,C++, dan Basic.

 Java Sound
Java Sound menyediakan sekumpulan API untuk manipulasi
sound.
k. Java IDL + CORBA Java IDL (Interface Definition Language)
menyediakan dukungan Java untuk implementasi CORBA
(Common Object Request Broker) yang merupakan model
distributed-Object untuk solusi aplikasi besar di dunia
networking.

 Java Card
Java Card utamanya digunakan untuk aplikasi – aplikasi pada
smart card, yang sederhana wujudnya seperti SIM Card pada
handphone.

 JTAPI (Java Telephony API)


Java Telepony API menyediakan sekumpulan API untuk
memanfaatkan devices – devices telepony, sehingga akan cocok
untuk aplikasi – aplikasi CTI (Computer Telephony Integration)

6 Intro J2ME
Politeknik Telkom Mobile Application

yang dibutuhkan seperti ACD (Automatic Call Distribution),


PCPBX dan lainnya.

1.2 Gambaran J2ME


J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada
perangkat konsumen. Perangkat ini memiliki jumlah memori yang
terbatas, menghabiskan sedikit daya dari baterei, layar yang kecil dan
bandwith jaringan yang rendah.

Dengan perkembangbiakan perangkat mobile konsumer dari telepon,


PDA, kotak permainan ke peralatan-peralatan rumah, Java
menyediakan suatu lingkungan yang portable untuk mengembangkan
dan menjalankan aplikasi pada perangkat ini.

Program J2ME, seperti semua program JAVA adalah diterjemahkan


oleh VM. Program-program tersebut dikompile ke dalam bytecode
dan diterjemahkan denga Java Virtual Machine(JVM). Ini berarti bahwa
program-program tersebut tidak berhubungan langsung dengan
perangkat.
J2ME menyediakan suatu interface yang sesuai dengan perangkat.
Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu
dijalankan pada mesin yang berbeda.

Inti dari J2ME terletak pada configuration dan profile-profile. Suatu


configuration menggambarkan lingkungan runtime dasar dari suatu
sistem J2ME. Ia menggambarkan core library, virtual machine, fitur
keamanan dan jaringan.

Gambar 1.3 Arsitektur J2ME

Intro J2ME 7
Politeknik Telkom Mobile Application

Sebuah profile memberikan library tambahan untuk suatu kelas


tertentu pada sebuah perangkat. Profile-profile menyediakan user
interface(UI) API,persistence, messaging library, dan sebagainya.
Satu set library tambahan atau package tambahan menyediakan
kemampuan program tambahan. Pemasukan package ini ke dalam
perangkat J2ME dapat berubah-ubah karena tergantung pada
kemampuan sebuah perangkat. Sebagai contoh, beberapa perangkat
MIDP tidak memiliki Bluetooth built-in, sehingga Bluetooth API tidak
disediakan dalam perangkat ini.

1.3 Configuration
Suatu configuration menggambarkan fitur minimal dari lingkungan
lengkap Java runtime. Untuk menjamin kemampuan portabilitas dan
interoperabilitas optimal diantara berbagai macam perangkat yang
dibatasi sumber dayanya(memory, prosesor, koneksi yang dibatasi),
configuration tidak menggambarkan fitur tambahan. Suatu
configuration J2ME menggambarkan suatu komplemen yang minimum
dari teknologi JAVA. Adalah merupakan tugas profile-profile untuk
menggambarkan tambahan library untuk suatu kategori perangkat
tertentu.
configuration menggambarkan:
 Subset bahasa pemrograman JAVA
 Kemampuan Java Virtual Machine(JVM)
 Core platform libraries
 Fitur sekuriti dan jaringan

1.4 Profile
Suatu profile menggambarkan set-set tambahan dari API dan fitur
untuk pasar tertentu, kategori perangkat atau industri. Sementara
configuration menggambarkan library dasar, profile-profile
menggambarkan library yang penting untuk membuat aplikasi-aplikasi
efektif. Library ini memasukkan user interface, jaringan dan
penyimpanan API.

8 Intro J2ME
Politeknik Telkom Mobile Application

1.5 Perangkat Mobile


Perangkat mobile memiliki banyak jenis dalam hal ukuran, desain
dan layout, tetapi mereka memiliki kesamaan karakteristik yang
sangat berbeda dari sistem desktop. Adapun karakteristik dari
perangkat mobile adalah sebagai berikut :

a. Ukuran yang kecil


Perangkat mobile memiliki ukuran yang kecil. Konsumen
menginginkan perangkat yang terkecil untuk kenyamanan dan
mobilitas mereka.

b. Memory yang terbatas


Perangkat mobile juga memiliki memory yang kecil, yaitu primary
(RAM) dan secondary (disk). Pembatasan ini adalah salah satu
faktor yang mempengaruhi penulisan program untuk berbagai
jenis dari perangkat ini. Dengan pembatasan jumlah dari memory,
pertimbangan-pertimbangan khusus harus diambil untuk
memelihara pemakaian dari sumber daya yang mahal ini.

c. Daya proses yang terbatas


Sistem mobile tidaklah setangguh rekan mereka yaitu desktop.
Ukuran, teknologi dan biaya adalah beberapa faktor yang
mempengaruhi status dari sumber daya ini. Seperti harddisk dan
RAM, Anda dapat menemukan mereka dalam ukuran yang pas
dengan sebuah kemasan kecil.

d. Mengkonsumsi daya yang rendah


Perangkat mobile menghabiskan sedikit daya dibandingkan dengan
mesin desktop. Perangkat ini harus menghemat daya karena
mereka berjalan pada keadaan dimana daya yang disediakan
dibatasi oleh baterai-baterai.

e. Kuat dan dapat diandalkan


Karena perangkat mobile selalu dibawa kemana saja, mereka
harus cukup kuat untuk menghadapi benturan-benturan, gerakan,
dan sesekali tetesan-tetesan air.

Intro J2ME 9
Politeknik Telkom Mobile Application

f. Konektivitas yang terbatas


Perangkat mobile memiliki bandwith rendah, beberapa dari
mereka bahkan tidak tersambung. Kebanyakan dari mereka
menggunakan koneksi wireless.

g. Masa hidup yang pendek


Perangkat-perangkat konsumen ini menyala dalam hitungan detik
kebanyakan dari mereka selalu menyala. Coba ambil kasus sebuah
handphone, mereka booting dalam hitungan detik dan
kebanyakan orang tidak mematikan handphone mereka bahkan
ketika malam hari. PDA akan menyala jika anda menekan tombol
power mereka.

Gambar 1.3 : Peralatan Mobile.

Pada gambar 1.3 peralatan mobile meliputi :


 pagers
 cellular telephones
 personal digital assistants atau organizers
 point of sale systems
 pocket communicators
 Internet screen telephones
 automobile navigation dan entertainment systems
 Internet television sets

10 Intro J2ME
Politeknik Telkom Mobile Application

1.6 Sistem Operasi untuk Alat Mobile

Terdapat tiga nama OS untuk mobile devices yang popular yaitu Palm
dengan PalmOS-nya, Symbian dengan EPOC-nya, dan Microsoft
dengan Pocket PC/ Windows CE-nya. Dalam hubungan OS mobile
device dengan teknologi J2ME (yang selama ini menjadi perhatian)
adalah tampak pada gambar 1.4 dibawah ini:

Gambar 1.4 Layer Configuration dan Profile


dengan OS pada teknologi J2ME

Meskipun demikian gerakan open source telah pula merambah dunia


OS mobile devices yaitu dengan hadirnya PDA (personal digital
assistant) dengan brand Sharp Zaurus yang menggunakan OS
berbasiskan Linux dan Java dengan berbagai keuntungan khas dunia
open source yaitu dikenal diseluruh dunia dan free community
development. Saya duga kedepan akan cerah prospeknya.

Tabel 1. Berbagai vendor mobile device dengan variasi OS-nya.

Symbian (EPOC) Palm (PalmOS) Microsoft (Pocket PC)


Sony Ericsson Palm Compaq
Motorola IBM HP
Nokia Sony Casio
Psion Dell Symbol
Matsushita Handspring Siemens/ Fujitsu
Philips Symbol Toshiba
Sony Qualcomm
Sanyo TRG

Intro J2ME 11
Politeknik Telkom Mobile Application

 Symbian (EPOC)

Symbian didirikan pada tahun 1998 oleh


Psion, Motorola, Nokia, dan Ericsson dan
Matsushita bergabung pada tahun berikutnya.
Pasar yang dikuasai oleh OS ini adalah dominan yaitu sekitar 60%
(http://www.symbian.com). Pada bulan Agustus 2000, Sony dan Sanyo
bergabung pula sebagai kelompok vendor pengguna EPOC.

Mobile devices yang saat ini menggunakan EPOC diantaranya adalah


Psion hand-held PC, Sony Ericsson P800, Nokia 7650, dan Nokia 9210
Communicator. OS EPOC dibagi dalam tiga versi yaitu : Smartphones
(voice centric with data functionality), Communicator (e.g. : Nokia
Communicator), dan PDA. EPOC telah dilengkapi dengan banyak
fungsi-fungsi dasar yang sepatutnya dimiliki oleh sebuah OS mobile
devices yaitu PIM (Personal Information Manager), integrated email, web
browser, dan kemampuan untuk synchronization. EPOC terus
meningkatkan kemampuannya dengan dilengkapi WAP browser,
Bluetooth support, peningkatan kapabilitas security, email, dan messaging.
Dan kini Symbian menikmati masa “bulan madu”-nya bermitra dengan
perusahaan terkemuka dunia NTT DoCoMo (10 Juli 2003 yang lalu,
Symbian mengumumkan bahwa Fujitsu, salah satu vendor mobile device
jaringan 3G, meluncurkan mobile videophone F2102V untuk layanan
NTT DoCoMo FOMA yang berbasiskan Symbian OS), Sun, Oracle,
dan Sybase. Symbian mengklaim bahwa ada sekitar 31.000 software
developer yang menggunakan EPOC sebagai basis pengembangan
aplikasinya.

Saat tulisan ini dibuat, versi terbaru dari Symbian adalah Symbian OS
v7.0s yang menyediakan berbagai layanan yang sangat sesuai dengan
berbagai functionality platform 3G market. Fitur utama dari versi ini
adalah :
– Lightweight multi-threaded multimedia framework.
– Support for W-CDMA.
– Java MIDP 2.0 enabled.
– Support for multiple primary/ secondly PDP contents.
– Support bi-directional text (Thai, Arabic, and Hebrew)

12 Intro J2ME
Politeknik Telkom Mobile Application

 Palm (PalmOS)

Produksi pertama dari Palm dijual tahun 1996. Setelah


itu PalmOS menjadi OS open licensed yang dibuat oleh
berbagai manufaktur mobile devices. IBM dan Dell juga
menjual original PalmPilot devices. Selain dari itu
Handspring juga menjadi perusahaan terbesar yang
menyediakan mobile devices berbasiskan PalmOS.

Sebagaimana Symbian, PalmOS juga menyediakan basic feature yaitu


PIM, email, dan messaging. Salah satu keuntungan dari Palm adalah
bahwa hardware manufacture dapat menambahkan beberapa tool untuk
digabungkan dengan hardware yang berbasis PalmOS tadi, misalnya
dengan menambahkan CompactFlash, Springboard, dan Palm clip-on.
Untuk produk masa depan, PalmOS dikonsentrasikan pada wireless
connectivity, bluetooth support, dan multi-language support. PalmOS pula
berkerjasama dengan beberapa berusahaan software terkemuka seperti
Computer Associates, IBM, Oracle, Peoplesoft, SAP, AOL, Sun, Siebel,
dan Tivoli. Palm mengklaim ada 50.000 software developer yang bekerja
dengan platform ini.

 Microsoft (Pocket PC)

Hand-held PC yang pertama


berbasiskan Windows pertama kali
tersedia pada tahun 1997. Pada
mulanya versi awal dari OS mobile
device ini sangatlah terbatas
performansi dan fungsionalitasnya sehingga berakibat pada angka
penjualannya yang mengecewakan. Namun kini Pocket PC menjelma
menjadi salah satu OS mobile device yang paling banyak menyediakan
software pendukungnya dan “mengawaki” PDA terkemuka saat ini dari
Compaq yaitu iPAQ.

Menurut David Coursey, Executive Editor Anchor Desk, bahwa hand-


held yang berbasiskan Pocket PC secara umum memerlukan beaya dua
kali lebih besar daripada PalmOS devices tetapi sebaliknya Pocket PC
menyediakan software pendukung lebih banyak daripada PalmOS. Anda
dapat mendengarkan musik atau mendownload buku dari

Intro J2ME 13
Politeknik Telkom Mobile Application

www.audible.com, memiliki software GPS navigation dari TrayRoute,


atau topographic maps dari Map Tech. Jika Anda bingung berjalan-jalan
di Amerika bisa pula menggunakan Microsoft Pocket Streets atau
Topo! Software dari National Geographic. Pendek kata dan sudah jelas
☺ software-software Microsoft dapat berjalan dengan baik di Pocket PC
seperti Microsoft Money, Word, Excel (tentu saja untuk versi Pocket
PC-nya).

14 Intro J2ME
Politeknik Telkom Mobile Application

Rangkuman

1. Java merupakan bahasa pemrograman “general purpose”, Java bisa


digunakan untuk pembuatan aplikasi web, database, grafis dan
berbagai aplikasi lainnya seperti bahasa pemrograman lainnya.
2. Dengan semboyan “write once run everywhere”, teknologi Java dengan
portabilitas yang tinggi, memungkinkan untuk jalan di segala sistem
operasi selama disitu ada JVM (Java Virtual Machine) termasuk
perangkat wireless dengan ukuran memori yang relatif kecil.
3. Sun Microsystem sebagai pengembang bahasa Java telah
mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise
Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition),
Java Card.
4. J2ME dirancang untuk dapat menjalankan program Java pada
perangkat-perangkat semacam handphone dan PDA, yang memiliki
karakteristik yang berbeda dengan sebuah komputer biasa, misalnya
kecilnya jumlah memori pada handphone dan PDA.
5. Perangkat mobile memiliki banyak jenis dalam hal ukuran,
desain dan layout, tetapi mereka memiliki kesamaan karakteristik
yang sangat berbeda dari sistem desktop. Adapun
karakteristik dari perangkat mobile adalah sebagai berikut :
 Ukuran yang kecil
 Memory yang terbatas
 Daya proses yang terbatas
 Mengkonsumsi daya yang rendah
 Kuat dan dapat diandalkan
 Konektivitas yang terbatas
 Masa hidup yang pendek
6. Terdapat tiga nama OS untuk mobile devices yang popular yaitu
Palm dengan PalmOS-nya, Symbian dengan EPOC-nya, dan
Microsoft dengan Pocket PC/ Windows CE-nya.

Intro J2ME 15
Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Sun Microsystem sebagai pengembang bahasa Java telah


mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise
Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition),
Java Card.
2. J2EE dan J2SE dikembangkan untuk platform Server dan PC, J2ME
dikembangkan untuk platform mobile device sedangkan Java Card
untuk platform simcard.
3. Pada dasarnya versi-versi tersebut sama untuk penggunaan API
sesuai dengan target platform yang akan digunakan dan
kompatibilitas platform tersebut.
4. J2ME dirancang untuk dapat menjalankan program Java pada
perangkat-perangkat semacam handphone dan PDA, yang memiliki
karakteristik yang berbeda dengan sebuah komputer biasa, misalnya
kecilnya jumlah memori pada handphone dan PDA.
5. J2ME terdiri atas komponen-komponen terdiri dari Java Virtual
Machine (JVM), Java API (Application Programming Interface), dan
Tools lain untuk pengembangan aplikasi Java semacam emulator Java
Phone, emulator Motorolla.
6. J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada
perangkat konsumen. Perangkat ini memiliki jumlah memori yang
terbatas, menghabiskan sedikit daya dari baterei, layar yang kecil dan
bandwith jaringan yang rendah.
7. J2ME menyediakan suatu interface yang sesuai dengan perangkat.
Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu
dijalankan pada mesin yang berbeda.
8. Inti dari J2ME terletak pada configuration dan profile-profile. Suatu
configuration menggambarkan lingkungan runtime dasar dari suatu
sistem J2ME. Ia menggambarkan core library, virtual machine, fitur
keamanan dan jaringan.

16 Intro J2ME
Politeknik Telkom Mobile Application

9. Sebuah profile memberikan library tambahan untuk suatu kelas


tertentu pada sebuah perangkat. Profile-profile menyediakan user
interface(UI) API,persistence, messaging library, dan sebagainya.
10. Terdapat tiga nama OS untuk mobile devices yang popular yaitu
Palm dengan PalmOS-nya, Symbian dengan EPOC-nya, dan Microsoft
dengan Pocket PC/ Windows CE-nya.

Intro J2ME 17
Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pengembangan versi Java oleh Sun Microsystem terdiri dari :


1. J2EE (Java 2 Enterprise Edition)
2. J2SE (Java 2 Standar Edition)
3. J2ME (Java 2 Micro Edition)
4. Java Card.

a. 1,2,3,4 c. 1,2
b. 1,2,3 d. 1

2. Kategori ini digunakan untuk menjalankan dan mengembangkan


aplikasi-aplikasi Java pada level PC (Personal Computer)
a. J2SE c. J2ME
b. J2EE d. Java
Card

3. Kategori ini digunakan untuk menjalankan dan mengembangkan


aplikasi-aplikasi Java pada lingkungan entriprise dengan
menambahkan fungsionalitasfungsionalitas Java semacam EJB
(Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML
(Extensible Markup Language)
a. J2SE c. J2ME
b. J2EE d. Java
Card

18 Intro J2ME
Politeknik Telkom Mobile Application

4. Kategori ini digunakan untuk menjalankan dan mengembangkan


aplikasi-aplikasi Java pada lingkungan entriprise dengan
menambahkan fungsionalitasfungsionalitas Java semacam EJB
(Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML
(Extensible Markup Language)
c. J2SE c. J2ME
d. J2EE d. Java
Card

Intro J2ME 19
Politeknik Telkom Mobile Application

Latihan

1. Sebutkan perbedaan antara J2SE, J2EE, J2ME dan Java Card ?


2. Apa keuntungan menggunakan java sebagai pengembangan dan platform
runtime untuk perangkat mobile?
3. Sebutkan komponen-komponen dari J2ME ?
4. Sebutkan kemampuan-kemampuan yang dimiliki Java API merupakan
komponen-komponen dan kelas Java yang sudah jadi ?
5. Sebutkan karakteristik perangkat mobile ?
6. Sebutkan tiga nama OS untuk mobile devices yang popular dan
masing-masing OS berikan minimal 3 contoh perangkat mobilenya ?

20 Intro J2ME
Politeknik Telkom Mobile Application

2 J2ME, J2EE DAN J2SE

Overview

Anda jangan berharap dapat memprogram dengan platform J2SE dan dapat
me-load-nya pada mobile devices, tentu saja berbeda terutama pada hal
prosesor computing dan memory-nya. Jika pada J2SE anda menggunakan
interpreter JVM, pada platform J2ME anda mempergunakan Kilo Virtual
Machine (KVM) yang “ditanam” dalam handheld devices. Sebagai informasi
bahwa J2EE merupakan superset dari J2SE, sebaliknya J2SE merupakan
superset bagi J2ME. Apa artinya? API yang ada pada J2ME sebagian
mengadopsi yang ada pada API J2SE, selain juga mengimplementasikan API
spesifik untuk teknologi J2ME itu (javax.microedition.*).

Tujuan

Pada akhir bab ini, siswa diharapkan dapat menguasai :


1. Menjelaskan tentang perbedaan J2ME dengan J2SE, dan J2EE
2. Pengenalan tentang macam dan ragam dari profil-profil J2ME .
seperti: Mobile Information Defice Profile (MIDP), PDA Profile
(PDAP), Foundation Profile, Personal Basis and Personal Profiles,
RMI Profile, dan Game Profile
3. Pengenalan tentang jenis konfigurasi-konfigurasi J2ME ,. seperti:
CDC and CLCD.s
4. Pertimbangan-pertimbangan design untuk membangun aplikasi
pada peralatan kecil dan peralatan mobile.
5. Pertimbangan-pertimbangan kinerja sistem
6. Pertimbangan-pertimbangan kompilasi
7. Pertimbangan-pertimbangan paket pembangunan sistem
8. CLCD Java Virtual Machine

J2ME, J2EE, J2SE 21


Politeknik Telkom Mobile Application

2.1 J2ME, J2SE dan J2EE

Pada perkembangan selanjutnya, Sun Microsystem memperkenalkan


Java versi 1.2 atau lebih dikenal dengan nama Java 2 yang terdiri atas
JDK dan JRE versi 1.2. Aplikasiaplikasi java yang kompatibel dengan
Java 2 ini dikenal dengan Java 2 Compliant. Pada Java 2 ini, java dibagi
menjadi 3 kategori:
 Java 2 Standart Edition (J2SE)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada level PC (Personal Computer)
 Java 2 Enterprise Edition (J2EE)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada lingkungan entriprise dengan
menambahkan fungsionalitasfungsionalitas Java semacam EJB
(Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java
XML (Extensible Markup Language)
 Java 2 Micro Edition (J2ME)
Kategori ini digunakan untuk menjalankan dan mengembangkan
aplikasi-aplikasi Java pada handled devices atau perangkat-
perangkat semacam handphone, Palm, PDA, dan Pocket PC.

Gambar 2.1 Java Platform

22 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

Gambar 2.2 Berbagai versi Java dilihat dari target platformnya

2.2 Java 2 Micro Edition

J2ME dirancang untuk dapat menjalankan program Java pada


perangkat-perangkat semacam handphone dan PDA, yang memiliki
karakteristik yang berbeda dengan sebuah komputer biasa, misalnya
kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas
komponen-komponen sebagai berikut :
 Java Virtual Machine (JVM), dikenal dengan nama KVirtualMachine
(KVM)
Komponen ini untuk menjalankan program program Java pada
emulator atau handled devices.
 Java API (Application Programming Interface)
Komponen ini merupakan kumpulan librari untuk menjalankan
dan mengembangkan program Java pada handled devices.
 Tools lain untuk pengembangan aplikasi Java semacam emulator
Java Phone, emulator Motorolla.
Dalam J2ME dibagi menjadi dua bagian yang dikenal dengan istilah
configuration dan profile.

J2ME, J2EE, J2SE 23


Politeknik Telkom Mobile Application

2.3 J2ME Configuration

J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh


karena setiap handled devices memiliki fitur-fitur yang berbeda-beda,
J2ME Configuration ini dirancang yakni menyediakan librari standar yang
mengimplementasikan fitur standar dari sebuah handled devices.
Mengapa perlu J2ME Configuration bisa dikatakan merupakan JRE pada
handled devices. Lingkungan kerja yang dimaksud meliputi Java Virtual
Machine yang digunakan untuk menjalankan program Java.

Gambar 2.3. J2ME components.


Ada dua kategori J2ME Configuration saat ini, yaitu :

 CLDC (Connected Limited Device Configuration)


Kategori ini umumnya digunakan untuk aplikasi Java pada
handphone semacam Nokia, Samsung Java Phone, Motorola i85s,
24 J2ME, J2EE, J2SE
Politeknik Telkom Mobile Application

PDA (Personal Digital Assistant) semacam PALM, Pocket PC.


Umumnya perangkat-perangkat tersebut hanya memiliki memori
berukuran 160-512 KiloBytes.

 CDC (Connected Device Configuration)


Kategori ini umumnya digunakan untuk aplikasi Java pada
perangkat-perangkat handled devices dengan ukuran memori
paling tidak 2 Megabytes. Contohnya adalah internet TV, Nokia
Communicator dan car television atau TV pada mobil.

Perbedaan antara CDC dan CLDC adalah sebagai berikut :

Tabel 2.1 Perbandingan antara CDC dan CLDC


CLDC CDC
Mengimplementasikan subset Mengimplementasikan seluruh
dari J2SE fitur pada J2SE
JVM yang digunakan dikenal JVM yang digunakan dikenal
dengan nama KVM dengan nama CVM
Digunakan pada perangkat Digunakan pada perangkat
handled dengan ukuran memori handled dengan ukuran memori
terbatas (160-512 KiloBytes) minimal 2 Mbytes
Processor 16 bit atau 32 bit Processor : 32 bit

2.3.1 CLDC

Gambar 2.3. API pada J2ME CLDC

J2ME, J2EE, J2SE 25


Politeknik Telkom Mobile Application

The Connected Limited Device Configuration (CLDC)


menggambarkan dan menunjuk pada area berikut ini:
 Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama
KVirtualMachine (KVM)
 Library dasar(java.lang.*,java.util.*)
 Input/Output(java.io.*)
 Kemanan
 Jaringan
 Internationalization

Fitur yang hilang


Fitur tertentu dari J2SE yang dipindahkan dari CLDC adalah :
 Finalization of class instances
 Asynchronous exceptions
 Beberapa error classes
 User-defined class loaders
 Reflection
 Java Native Interface (JNI)
 Thread groups dan daemon threads

Reflection, Java Native Interface (JNI) dan user-defined class loaders


potensial menjadi lubang keamanan. JNI juga membutuhkan memory
yang intensif sehingga dimungkinkan untuk tidak mendapat dukungan
dari memory rendah sebuah perangkat mobile.

Karakteristik perangkat CLDC


Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai
berikut:
 Memory minimal 192kb untuk platform Java.
 Prosesor dengan 16 atau 32 bit.
 Mengkonsumsi sedikit daya.
 Terbatas, koneksi jaringan yang sementara dengan pembatasan
bandwith(biasanya wireless).
CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi,
antarmuka(UI) dan penanganan peristiwa(event handling). Adalah
merupakan tugas profile yang berada di bawah CLDC untuk
menggambarkan area ini. Secara khusus, spesifikasi MIDP

26 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan


event handling(javax.microedition.lcdui.*).

2.3.2 CDC

Connected Device Configuration (CDC) adalah super set dari CLDC.


CDC menyediakan lingkungan Java runtime yang lebih luas
dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE.

CDC Java Virtual Machine (CVM) mendukung penuh Java Virtual


Machine (JVM). CDC berisi semua API dari CLDC. CDC
menyediakan suatu subset yang lebih besar dari semua class J2SE.
Seperti CLDC, CDC tidak menggambarkan setiap class UI. Library UI
digambarkan oleh profileprofile di bawah configuration ini.
Semua class yang terdapat dalam CDC datang dari package ini:
● java.io
● java.lang
● java.lang.ref
● java.lang.math
● java.net
● java.security
● java.security.cert
● java.text
● java.util
● java.util.jar
● java.util.zip
CDC juga memasukkan di dalamnya GCF. CDC memerlukan jenis
koneksi tambahan seperti file dan dukungan datagram.

2.4 Java Technology for the Wireless Industry (JTWI)

Java Technology for the Wireless Industry (JTWI) menetapkan satu set
jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata kuncinya
adalah “untuk memperkecil fragmentasi API di dalam pasar telepon
mobile, dan untuk mengirim spesifikasi yang dapat diprediksi,spesifikasi
yang jelas untuk perangkat pabrik, operator, dan pengembang aplikasi”.

J2ME, J2EE, J2SE 27


Politeknik Telkom Mobile Application

Dengan penyesuaian kepada JTWI, banyak aplikasi akan berjalan di


suatu set yang lebih luas pada perangkat. Perangkat pabrik juga akan
beruntung karena sebuah aplikasi yang besar akan tersedia untuk
perangkat mereka.

Gambar 2.4: Komponen JTWI

2.5 Generic Connection Framework

The Generic Connection Framework menyediakan API dasar untuk


koneksi dalam CLDC. Framework ini menyediakan suatu pondasi
umum untuk koneksi seperti HTTP, Socket, dan Datagrams. GCF
menyediakan suatu set API yang umum dan biasa yang memisahkan
semua jenis koneksi. Perlu dicatat bahwa tidak semua jenis koneksi
dibutuhkan untuk diterapkan oleh perangkat MIDP.
Hirarki interface yang dapat diperluas dari GFC membuat proses
penyamarataan menjadi mungkin. Jenis koneksi baru mungkin bisa
ditambahkan ke dalam framework ini dengan memperluas hirarki ini.

28 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

Gambar 2.6: Hirarki koneksi GCF

2.6 J2ME Profile

Jika J2ME Configuration menyediakan librari-librari Java untuk


implementasi fitur-fitur standar dari sebuah handled devices, J2ME
Profile menyediakan implementasi implementasi tambahan yang sangat
spesifik dari sebuah handled devices. Kemampuan standart itulah yang
diimplementasikan oleh J2ME Configuration, sedangkan kemampuan
fitur lain sangat bergantung pada jenis perangkat handled yang
digunakan akan diimplementasikan oleh J2ME Profile.
Ada lima kategori J2ME Profile saat ini, yaitu :
 Mobile Information Device Profile (MIDP)
 Foundation Profile (FP)
 Personal Profile
 RMI Profile
 Personal Digital Assitance Profile

J2ME, J2EE, J2SE 29


Politeknik Telkom Mobile Application

MIDP menyediakan librari-librari Java untuk implementasi dasar


antarmuka (GUI), implementasi jaringan, database dan timer. MIDP
dirancang khususnya untuk wireless phone dan pager. Buku ini hanya
akan membahas pengembangan aplikasi wireless dengan MIDP saja
yang bekerja pada CLDC.

2.7 Java Community Process (JCP)

Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah


pengawasan Java Community Process (JCP). Spesifikasi yang dihasilkan
adalah Java Specification Request (JSR). JCP terdiri dari para ahli dari
berbagai perusahaan yang tergabung untuk membentuk Spesification.
JSR ini melalui beberapa tahap pada JCP sebelum selesai. Setiap JSR
diberi nomor.

Tabel 1 Configurasi, Profile dan Optional API pada J2ME.

Configuration
JSR Name URL
30 Connected Limited Device http://jcp.org/jsr/detail/30.jsp
Configuration (CLDC) 1.0
139 Connected Limited Device http://jcp.org/jsr/detail/139.jsp
Configuration (CLDC) 1.1
36 Connected Device http://jcp.org/jsr/detail/36.jsp
Configuration (CLDC) 1.0.1
218 Connected Device http://jcp.org/jsr/detail/218.jsp
Configuration (CLDC) 1.1

Profile
JSR Name URL
37 Mobile Information Device http://jcp.org/jsr/detail/37.jsp
Profile 1.0
118 Mobile Information Device http://jcp.org/jsr/detail/118.jsp
Profile 2.0
75 PDA Profile 1.0 http://jcp.org/jsr/detail/75.jsp
46 Foundation Profile 1.0 http://jcp.org/jsr/detail/46.jsp
129 Personal Basis Profile 1.0 http://jcp.org/jsr/detail/129.jsp

30 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

62 Personal Profile 1.0 http://jcp.org/jsr/detail/62.jsp


219 Foundation Profile 1.1 http://jcp.org/jsr/detail/219.jsp
217 Personal Basis Profile 1.1 http://jcp.org/jsr/detail/217.jsp

Optional API
JSR Name URL
75 PDA Optional Packages for http://jcp.org/jsr/detail/75.jsp
J2ME
82 Java APIs for Bluetooth http://jcp.org/jsr/detail/82.jsp
135 Mobile Media API 1.1 http://jcp.org/jsr/detail/135.jsp
184 Mobile 3D Graphics http://jcp.org/jsr/detail/184.jsp
179 Location API for J2ME http://jcp.org/jsr/detail/179.jsp
120 Wireless Messaging API 1.0 http://jcp.org/jsr/detail/120.jsp
205 Wireless Messaging API 2.0 http://jcp.org/jsr/detail/205.jsp
172 J2ME Web Services APIs http://jcp.org/jsr/detail/172.jsp
66 RMI Optional Package http://jcp.org/jsr/detail/66.jsp

2.8 MIDP

Mobile Information Device Profile (MIDP) berada di atas dari CLDC.


Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan
CLDC API. Anda harus tetap memanfaatkan MIDP yang
mendefinisikan UI.

Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah


digambarkan melalui Java Community Process (JCP). JCP melibatkan
sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang
terdiri atas pabrik perangkat mobile, pengembang software. MIDP
terus berkembang, dengan versi-versi masa depan yang telah lulus dari
proses ketat JCP.

Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki


karakteristik-karateristik ini sebagai batas minimum:
 Tampilan:
 Ukuran Layar: 96x54
 kedalaman tampilan: 1-bit
 Ketajaman pixel: sekitar 1:1

J2ME, J2EE, J2SE 31


Politeknik Telkom Mobile Application

 Masukan:
Satu atau lebih mekanisme user-input: satu keybboard, dua
keyboard, atau touch screen
 Memory:
 256 kilobytes of non-volatile memory untuk implementasi
MIDP.
 8 kilobytes of non-volatile memory for application-created
persistent data
 128 kilobytes of volatile memory for the Java runtime (e.g.,
the Java heap)
 Jaringan:
dua jalur, wireless, bandwidth terbatas
 Sound:
Kemampuan untuk memainkan nada-nada

MIDP menggambarkan model aplikasi, UI API, penyimpanan dan


jaringan yang kuat, permainan dan media API, kebijakan keamanan,
penyebaran aplikasi dan ketetapan over-theair.

2.9 MIDlet

Suatu aplikasi MIDP disebut MIDlet. Perangkat application


management software (AMS) berinteraksi langsung dengan MIDlet
dengan method MIDlet create, start, pause, dan destroy.
MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah
MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta
parameter dari AMS seperti dirumuskan dalam application descriptor
(JAD).

Suatu MIDlet tidak harus memiliki (dan memang harus tidak


mempunyai) sebuah method public static void main(String[]
argv).Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik
awal sebuah program.

32 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

2.10 Siklus MIDlet

kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. MIDlet pada


awalnya masuk status “Pause” setelah perintah baru dibuat. AMS
memanggil constructor public tanpa argumen dari MIDlet. Jika sebuah
exception terjadi dalam constructor, MIDlet memasuki status
“Destroyed” dan membuangnya segera.

MIDlet masuk ke dalam status “Active” atas pemanggilan method


startUp() oleh AMS.

MIDlet masuk ke dalam status “Destroyed” ketika AMS memanggil


method destroyApp().

Status ini juga kembali diakses ketika method notifyDestroyed()


kembali dengan sukses kepada aplikasi. Dengan catatan bahwa MIDlet
hanya bisa memasuki status “Destroyed” sekali dalam masa hidupnya.

Gambar 2.7: Daur hidup MIDlet

J2ME, J2EE, J2SE 33


Politeknik Telkom Mobile Application

Rangkuman

1. Menjelaskan tentang perbedaan J2ME dengan J2SE, dan J2EE


2. J2ME dirancang untuk dapat menjalankan program Java pada
perangkat-perangkat semacam handphone dan PDA, yang memiliki
karakteristik yang berbeda dengan sebuah komputer biasa, misalnya
kecilnya jumlah memori pada handphone dan PDA.
3. J2ME terdiri atas komponen-komponen sebagai berikut :
 Java Virtual Machine (JVM), dikenal dengan nama KVirtualMachine
(KVM)
Komponen ini untuk menjalankan program program Java pada
emulator atau handled devices.
 Java API (Application Programming Interface)
Komponen ini merupakan kumpulan librari untuk menjalankan
dan mengembangkan program Java pada handled devices.
 Tools lain untuk pengembangan aplikasi Java semacam emulator
Java Phone, emulator Motorolla.
4. Dalam J2ME dibagi menjadi dua bagian yang dikenal dengan istilah
configuration dan profile.
5. J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime.
Oleh karena setiap handled devices memiliki fitur-fitur yang
berbeda-beda, J2ME Configuration ini dirancang yakni menyediakan
librari standar yang mengimplementasikan fitur standar dari sebuah
handled devices.
6. Ada dua kategori J2ME Configuration saat ini, yaitu :
 CLDC (Connected Limited Device Configuration)
Kategori ini umumnya digunakan untuk aplikasi Java pada
handphone semacam Nokia, Samsung Java Phone, Motorola
i85s, PDA (Personal Digital Assistant) semacam PALM, Pocket
PC. Umumnya perangkat-perangkat tersebut hanya memiliki
memori berukuran 160-512 KiloBytes.

34 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

 CDC (Connected Device Configuration)


Kategori ini umumnya digunakan untuk aplikasi Java pada
perangkat-perangkat
handled devices dengan ukuran memori paling tidak 2
Megabytes. Contohnya adalah internet TV, Nokia
Communicator dan car television atau TV pada mobil.
7. The Connected Limited Device Configuration (CLDC)
menggambarkan dan menunjuk pada area berikut ini:
• Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama
KVirtualMachine (KVM)
• Library dasar(java.lang.*,java.util.*)
• Input/Output(java.io.*)
• Kemanan
• Jaringan
• Internationalization
8. Connected Device Configuration (CDC) adalah super set dari
CLDC. CDC menyediakan lingkungan Java runtime yang lebih luas
dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE.
9. Java Technology for the Wireless Industry (JTWI) menetapkan satu set
jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata kuncinya
adalah “untuk memperkecil fragmentasi API di dalam pasar telepon
mobile, dan untuk mengirim spesifikasi yang dapat
diprediksi,spesifikasi yang jelas untuk perangkat pabrik, operator, dan
pengembang aplikasi”.
10. J2ME Configuration menyediakan librari-librari Java untuk
implementasi fitur-fitur standar dari sebuah handled devices, J2ME
Profile menyediakan implementasi implementasi tambahan yang
sangat spesifik dari sebuah handled devices. Ada lima kategori J2ME
Profile saat ini, yaitu :
 Mobile Information Device Profile (MIDP)
 Foundation Profile (FP)
 Personal Profile
 RMI Profile
 Personal Digital Assitance Profile

J2ME, J2EE, J2SE 35


Politeknik Telkom Mobile Application

11. Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah


pengawasan Java Community Process (JCP). Spesifikasi yang
dihasilkan adalah Java Specification Request (JSR). JCP terdiri dari
para ahli dari berbagai perusahaan yang tergabung untuk membentuk
Spesification. JSR ini melalui beberapa tahap pada JCP sebelum
selesai. Setiap JSR diberi nomor.
12. Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah
digambarkan melalui Java Community Process (JCP). JCP melibatkan
sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang
terdiri atas pabrik perangkat mobile, pengembang software. MIDP
terus berkembang, dengan versi-versi masa depan yang telah lulus
dari proses ketat JCP.
13. Suatu aplikasi MIDP disebut MIDlet. Perangkat application
management software (AMS) berinteraksi langsung dengan MIDlet
dengan method MIDlet create, start, pause, dan destroy.
14. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah
MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta
parameter dari AMS seperti dirumuskan dalam application
descriptor (JAD).
15. Kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. Jika Anda
mengenal Java Applet, Anda akan menemukan bahwa Applet dapat
berada dalam status init(), start(), stop() dan run().

36 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime.


Oleh karena setiap handled devices memiliki fitur-fitur yang
berbeda-beda, J2ME Configuration ini dirancang yakni
menyediakan librari standar yang mengimplementasikan fitur
standar dari sebuah handled devices.
2. J2ME Configuration bisa dikatakan merupakan JRE pada handled
devices. Lingkungan kerja yang dimaksud meliputi Java Virtual
Machine yang digunakan untuk menjalankan program Java.
3. Ada dua kategori J2ME Configuration saat ini, yaitu CLDC
(Connected Limited Device Configuration) dan CDC
(Connected Device Configuration)
4. CLDC (Connected Limited Device Configuration) umumnya
digunakan untuk aplikasi Java pada handphone semacam Nokia,
Samsung Java Phone, Motorola i85s, PDA (Personal Digital
Assistant) semacam PALM, Pocket PC. Umumnya perangkat-
perangkat tersebut hanya memiliki memori berukuran 160-512
KiloBytes.
5. CDC (Connected Device Configuration) umumnya digunakan
untuk aplikasi Java pada perangkat-perangkat handled devices
dengan ukuran memori paling tidak 2 Megabytes. Contohnya
adalah internet TV, Nokia Communicator dan car television
atau TV pada mobil.
6. CLDC tidak menggambarkan instalasi dan daur hidup sebuah
aplikasi, antarmuka(UI) dan penanganan peristiwa(event
handling). Adalah merupakan tugas profile yang berada di bawah
CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi
MIDP menggambarkan daur hidup aplikasi MIDP (MIDlet),
library UI dan event handling(javax.microedition.lcdui.*).

J2ME, J2EE, J2SE 37


Politeknik Telkom Mobile Application

7. Connected Device Configuration (CDC) adalah super set dari


CLDC. CDC menyediakan lingkungan Java runtime yang lebih
luas dibandingkan CLDC dan lebih dekat kepada lingkungan
J2SE.
8. Java Technology for the Wireless Industry (JTWI) menetapkan satu
set jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata
kuncinya adalah “untuk memperkecil fragmentasi API di dalam
pasar telepon mobile, dan untuk mengirim spesifikasi yang dapat
diprediksi,spesifikasi yang jelas untuk perangkat pabrik,
operator, dan pengembang aplikasi”.
9. The Generic Connection Framework menyediakan API dasar
untuk koneksi dalam CLDC. Framework ini menyediakan suatu
pondasi umum untuk koneksi seperti HTTP, Socket, dan
Datagrams. GCF menyediakan suatu set API yang umum dan
biasa yang memisahkan semua jenis koneksi.
10. Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah
pengawasan Java Community Process (JCP).

38 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Yang bukan merupakan karakteristeristik dari CLDC adalah :


a. Mengimplementasikan subset dari J2SE
b. JVM yang digunakan dikenal dengan nama CVM
c. Digunakan pada perangkat handled dengan ukuran memori terbatas
(160-512 KiloBytes)
d. Processor 16 bit atau 32 bit
2. Yang bukan merupakan karakteristeristik dari CDC adalah :
a. Mengimplementasikan seluruh fitur pada J2SE
b. JVM yang digunakan dikenal dengan nama CVM
c. Digunakan pada perangkat handled dengan ukuran memori terbatas
(160-512 KiloBytes)
d. Processor : 32 bit
3. J2ME Profile saat ini terdiri dari :
1. Mobile Information Device Profile (MIDP)
2. Foundation Profile (FP)
3. Personal Profile
4. RMI Profile
5. Personal Digital Assitance Profile

a. 1, 2, 3, 4, 5 c. 1, 2, 3
b. 1, 2, 3, 4 d. 1, 2

4. Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki


karakteristik-karateristik ini sebagai batas minimum pada aspek-aspek :
1. Tampilan
2. Masukan
3. Memory
4. Jaringan
5. Sound

a. 1, 2, 3, 4, 5 c. 1, 2, 3
b. 1, 2, 3, 4 d. 1, 2

J2ME, J2EE, J2SE 39


Politeknik Telkom Mobile Application

Latihan

1. Sebutkan perbedaan antara CLDC dan CDC ?


2. Sebutkan Fitur tertentu dari J2SE yang dipindahkan dari CLDC?
3. Sebutkan karakteristik dari perangkat CLDC ?
4. Sebutkan lima kategori J2ME Profile saat ini ?
5. Sebutkan spesifikasi MIDP menggambarkan suatu perangkat MIDP
yang memiliki karakteristik-karateristik ini sebagai batas minimum?

40 J2ME, J2EE, J2SE


Politeknik Telkom Mobile Application

3 CLCD

Overview

Pada J2SE anda menggunakan interpreter JVM, pada platform J2ME anda
mempergunakan Kilo Virtual Machine (KVM) yang “ditanam” dalam handheld
devices. Sebagai informasi bahwa J2EE merupakan superset dari J2SE,
sebaliknya J2SE merupakan superset bagi J2ME. Apa artinya? API yang ada pada
J2ME sebagian mengadopsi yang ada pada API J2SE, selain juga
mengimplementasikan API spesifik untuk teknologi J2ME itu
(javax.microedition.*).

Tujuan

Pada bab ini, pelajar diharapkan dapat menguasai :


1. Connected Limited Device Configuration (CLCD)
2. Kilobyte Virtual Machine (KVM)

CLDC 41
Politeknik Telkom Mobile Application

J2ME CLDC dan KVM telah digunakan oleh banyak platform dan
devices, termasuk oleh Motorola phones dan two-way pagers, Research
in Motion (RIM) wireless handhelds, dan Palm PDA. Jutaan J2ME CLDS
digunakan sehari-hari oleh berbagai mobile phone di Jepang dan Korea.
Banyak pula consumer yang menggunakan J2ME dengan Motorola
handsets pada jaringan Nextel di USA, dan dalam tahap test dan
commercial deployment di Vodaphone Airtouch, Sprint PCS, Telefonica,
dan operator lainnya di USA. Symbian terus men-support Java
Technology untuk di-release-nya Nokia Communicator 9210 yang
berbasiskan Java Technology pada akhir 2001.

Gambar 3.1 : Arsitektur Java 2 Micro Edition

3.1 CLDC

Gambar 3.2 : CLDC Scope

42 CLDC
Politeknik Telkom Mobile Application

Seperti dijelaskan pada gambar 3.1 dibagian I, J2ME terbagi menjadi 2:


CDC dan CLDC. Pada CLDC(Connected Limited Device
Configuration) umumnya untuk aplikasi java pada handphone seperti
produk-produk Siemens, Nokia, Motorola dll. Sedangkan
CDC(Connected Device Configuration) umumnya digunakan pada
perangkat dengan memori setidaknya 2 Mb. Subset API pada CLDC
dijelaskan pada gambar di bawah ini.

Gambar 3.3. API pada J2ME CLDC

Salah satu kelemahan CLDC yang merisaukan programmer adalah


tidak adanya dukungan floating point sehingga kreatifitas programmer
sangat diperlukan. Pembahasan buku ini mengacu pada J2ME
configuration CLDC.

3.1.1 Karakteristik perangkat CLDC

Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai


berikut:
 Memory minimal 192kb untuk platform Java.
 Prosesor dengan 16 atau 32 bit.
 Mengkonsumsi sedikit daya.

CLDC 43
Politeknik Telkom Mobile Application

 Terbatas, koneksi jaringan yang sementara dengan pembatasan


bandwith(biasanya wireless).
CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi,
antarmuka(UI) dan penanganan peristiwa(event handling). Adalah
merupakan tugas profile yang berada di bawah CLDC untuk
menggambarkan area ini. Secara khusus, spesifikasi MIDP
menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan
event handling(javax.microedition.lcdui.*).

The Connected Limited Device Configuration (CLDC)


menggambarkan dan menunjuk pada area berikut ini :
1. Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama
KVirtualMachine (KVM)
2. Library dasar(java.lang.*,java.util.*)
3. Input/Output(java.io.*)
4. Kemanan
5. Jaringan
6. Internationalization

3.1.2 Fitur yang hilang

Akibatnya fitur-fitur yang kurang penting untuk diimplementasikan


dalam handled devices yang bersangkutan pada Java 2 harus dibuang.
Fitur-fitur tertentu dari J2SE yang dibuang antara lain :
 Tidak ada dukungan untuk floating point
Class-class untuk perhitungan floating point yakni java.lang.Float
dan java.lang.Double dibuang dari CLDC.
 Tidak ada dukungan untuk finalisasi objek
Garbage collector yang secara sederhananya digunakan untuk
”bersih-bersih memori” membuang fungsi finalize pada class
java.lang.Object, sekalipun fungsi ini sangat penting pada Java 2.
 Tidak ada dukungan untuk Java Native Interface (JNI)
Class JNI yang memungkinkan Java mengakses librari yang dibuat
dengan bahasa selain Java, tidak didukung CLDC.I
 Penanganan kesalahan/exception yang terbatas
CLDC hanya mendefinisikan tiga class berikut untuk penanganan
kesalahan / exception:
o class java.lang.Error

44 CLDC
Politeknik Telkom Mobile Application

o class java.lang.OutOfMemory
o class java.lang.VirtualMachineError
 Asynchronous exceptions
 Beberapa error classes
 User-defined class loaders
 Reflection
 Thread groups dan daemon threads
Reflection, Java Native Interface (JNI) dan user-defined class loaders
potensial menjadi lubang keamanan. JNI juga membutuhkan memory
yang intensif sehingga dimungkinkan untuk tidak mendapat dukungan
dari memory rendah sebuah perangkat mobile.

3.1.3 CLDC market

Gambar 3.3 : Peralatan Mobile.

Pada gambar 3.3 peralatan mobile meliputi :


 pagers
 cellular telephones
 personal digital assistants atau organizers
 point of sale systems
 pocket communicators
 Internet screen telephones
 automobile navigation dan entertainment systems
 Internet television sets

CLDC 45
Politeknik Telkom Mobile Application

3.1.4 Java TM Language Spesification (JLS)

Kompatibilitas dari Java TM Language Spesification (JLS) :


 Important thing :
karena keterbatasan memory dan lainnya, maka KVM (kilo
virtual machine) tidak dapat mengadaptasi seluruh fitur yang ada
dalam JLS.
 No floating point support untuk CLDC 1.0.
Kelas java.lang.Float dan java.lang.Double dibuang dari CLDC.
 No finalization object instances.
Garbage collector yang menjadi salah satu andalan teknologi
Java tidak di-support oleh CLDC.
 Limited error handling capabilities.
CLDC hanya mendukung penanganan kesalahan dengan hanya
menggunakan kelas-kelas berikut :
java.lang.Error,
java.lang,OutOfMemory, dan
java.lang.VirtualMachineError.
 No thread & no JNI.

3.1.5 Preverification dan Application Representation

 Class file harus dipreverifikasi dan harus berisi informasi


preverifikasi (anda akan menerima runtime error manakala
berusaha mengeksekusi aplikasi yang belum ter preverifikasi).

 Jar format digunakan manakala sebuah aplikasi CLDC disimpan


pada tempat publik (misalnya disimpan pada sebuah situs web).
Selain format jar hanya mungkin digunakan pada lingkungan
internal saja (missal saat implementasi atau saat network level)

46 CLDC
Politeknik Telkom Mobile Application

Gambar 3.4. API pada J2ME CLDC

3.2 CLDC Libraries

3.2.1 CLDC Libraries pewarisan dari J2SE

Class yang diwariskan dari Java 2 Standar Edition Platform adalah


paket:
1. java.lang.* (Boolean, Byte, Character, Integer, Long, Math,
Runnable, Runtime, System, StringBuffer).
2. java.util.* (Calendar, Date, Enumeration, Hashtable,
Random, Stack, TimeZone, Vector).
3. java.io.* (berbagai variasi input & output stream readers
dan writers : ByteArrayInput/Output,
DataStreamInput/Ouput Reader/Writer).

CLDC 47
Politeknik Telkom Mobile Application

1. Java Lang

Gambar 3.5. Hirarki library Java Lang

48 CLDC
Politeknik Telkom Mobile Application

2. Java Util

Gambar 3.6. Hirarki library Java Util

CLDC 49
Politeknik Telkom Mobile Application

3. Java IO

Gambar 3.7. Hirarki library Java IO

50 CLDC
Politeknik Telkom Mobile Application

3.2.2 CLDC Libraries J2ME

Class library dari J2ME Platform adalah paket:


1. Package java.microedition.io
2. Package javax.microedition.lcdui
3. Package javax.microedition.midlet
4. Package javax.microedition.rms

1. Package java.microedition.io

Gambar 3.8 Hirarki class java.microedition.io

CLDC 51
Politeknik Telkom Mobile Application

2. Package javax.microedition.lcdui

Gambar 3.9 Hirarki javax.microedition.lcdui

52 CLDC
Politeknik Telkom Mobile Application

3. Package javax.microedition.midlet

Gambar 3.10 Hirarki javax.microedition.midlet

4. Package javax.microedition.rms

Gambar 3.11 Hirarki javax.microedition.rms

CLDC 53
Politeknik Telkom Mobile Application

3.3 CLDC System Properties

 CLDC menyediakan akses pada system properties melalui


java.lang.System.
 system.getProperty(String key) akan mengembalikan nilai string.
 Properti berikut digunakan oleh seluruh CLDC devices :
microedition.platform,
microedition.encoding,
microedition.configuration,
microedition.profiles.
 Profiles harus memberikan nilai yang spesifik untuk CLDC
properties tersebut diatas (MIDP 1.0 requires microedition.profiles
to contain at least "MIDP-1.0").

3.4 CLDC Networking

 Libraries Networking pada J2SE terlalu besar untuk CLDC devices.


Diasumsikan TCP/IP telah tersedia.
 CLDC membuat suatu set kelas baru yang disebut “Generic
Connection Framework”. Key idea : treat everything as a URL :
Connector.open("<protocol>:<address>; <parameters>").
 CLDC mendefinisikan basic connection types sedangkan protocol
didefinisikan pada profiles.

3.1 Generic Connection Possibilities

 General form :
Connector.open("<protocol>://<address>:<parameters>");
 Files : Connector.open("file://myfile.txt");
 HTTP : Connector.open("http://wireless.java.sun.com");
 Sockets : Connector.open("socket://129.144.111.222:9000");
 Communication ports : Connector.open("comm://9600:18N");

54 CLDC
Politeknik Telkom Mobile Application

3.5 Verifikasi Class oleh KVM

Spesifikasi CLDC memerlukan semua class untuk melewati proses


verifikasi dua tingkat. Verifikasi pertama dilaksanakan diluar perangkat
sebelum instalasi pada perangkat. Verifikasi kedua terjadi pada
perangkat selama runtime dan dilaksanakan oleh KVM.

Gambar 3.12: Proses Verifikasi dua tingkat

CLDC 55
Politeknik Telkom Mobile Application

Rangkuman

1. Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai


berikut:
 Memory minimal 192kb untuk platform Java.
 Prosesor dengan 16 atau 32 bit.
 Mengkonsumsi sedikit daya.
 Terbatas, koneksi jaringan yang sementara dengan pembatasan
bandwith(biasanya wireless).
2. CLDC tidak menggambarkan instalasi dan daur hidup sebuah
aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling).
Adalah merupakan tugas profile yang berada di bawah CLDC untuk
menggambarkan area ini. Secara khusus, spesifikasi MIDP
menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan
event handling(javax.microedition.lcdui.*).
3. Akibatnya fitur-fitur yang kurang penting untuk diimplementasikan
dalam handled devices yang bersangkutan pada Java 2 harus dibuang.
Fitur-fitur tertentu dari J2SE yang dibuang antara lain :
 Tidak ada dukungan untuk floating point
Class-class untuk perhitungan floating point yakni java.lang.Float
dan java.lang.Double dibuang dari CLDC.
 Tidak ada dukungan untuk finalisasi objek
Garbage collector yang secara sederhananya digunakan untuk
”bersih-bersih memori” membuang fungsi finalize pada class
java.lang.Object, sekalipun fungsi ini sangat penting pada Java 2.
 Tidak ada dukungan untuk Java Native Interface (JNI)
Class JNI yang memungkinkan Java mengakses librari yang dibuat
dengan bahasa selain Java, tidak didukung CLDC.I
 Penanganan kesalahan/exception yang terbatas
CLDC hanya mendefinisikan tiga class berikut untuk penanganan
kesalahan / exception:
o class java.lang.Error
o class java.lang.OutOfMemory
o class java.lang.VirtualMachineError

56 CLDC
Politeknik Telkom Mobile Application

 Asynchronous exceptions
 Beberapa error classes
 User-defined class loaders
 Reflection
 Thread groups dan daemon threads
4. Kompatibilitas dari Java TM Language Spesification (JLS) :
 Important thing :
karena keterbatasan memory dan lainnya, maka KVM (kilo
virtual machine) tidak dapat mengadaptasi seluruh fitur yang ada
dalam JLS.
 No floating point support untuk CLDC 1.0.
Kelas java.lang.Float dan java.lang.Double dibuang dari CLDC.
 No finalization object instances.
Garbage collector yang menjadi salah satu andalan teknologi
Java tidak di-support oleh CLDC.
 Limited error handling capabilities.
CLDC hanya mendukung penanganan kesalahan dengan hanya
menggunakan kelas-kelas berikut :
java.lang.Error,
java.lang,OutOfMemory, dan
java.lang.VirtualMachineError.
 No thread & no JNI.
5. Class yang diwariskan dari Java 2 Standar Edition Platform adalah
paket:
a. java.lang.* (Boolean, Byte, Character, Integer, Long, Math,
Runnable, Runtime, System, StringBuffer).
b. java.util.* (Calendar, Date, Enumeration, Hashtable, Random,
Stack, TimeZone, Vector).
c. java.io.* (berbagai variasi input & output stream readers dan
writers : ByteArrayInput/Output, DataStreamInput/Ouput
Reader/Writer).
6. Class library dari J2ME Platform adalah paket:
a. Package java.microedition.io
b. Package javax.microedition.lcdui
c. Package javax.microedition.midlet
d. Package javax.microedition.rms

CLDC 57
Politeknik Telkom Mobile Application

7. CLDC System Properties


 CLDC menyediakan akses pada system properties melalui
java.lang.System.
 system.getProperty(String key) akan mengembalikan nilai string.
 Properti berikut digunakan oleh seluruh CLDC devices :
microedition.platform,
microedition.encoding,
microedition.configuration,
microedition.profiles.
 Profiles harus memberikan nilai yang spesifik untuk CLDC
properties tersebut diatas (MIDP 1.0 requires
microedition.profiles to contain at least "MIDP-1.0").
8. CLDC Networking
 Libraries Networking pada J2SE terlalu besar untuk CLDC
devices. Diasumsikan TCP/IP telah tersedia.
 CLDC membuat suatu set kelas baru yang disebut “Generic
Connection Framework”. Key idea : treat everything as a URL :
Connector.open("<protocol>:<address>; <parameters>").
 CLDC mendefinisikan basic connection types sedangkan
protocol didefinisikan pada profiles.
9. Generic Connection Possibilities
 General form :
Connector.open("<protocol>://<address>:<parameters>");
 Files : Connector.open("file://myfile.txt");
 HTTP : Connector.open("http://wireless.java.sun.com");
 Sockets : Connector.open("socket://129.144.111.222:9000");
 Communication ports : Connector.open("comm://9600:18N");
10. Spesifikasi CLDC memerlukan semua class untuk melewati proses
verifikasi dua tingkat. Verifikasi pertama dilaksanakan diluar
perangkat sebelum instalasi pada perangkat. Verifikasi kedua terjadi
pada perangkat selama runtime dan dilaksanakan oleh KVM.

58 CLDC
Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Pada CLDC(Connected Limited Device Configuration) umumnya


untuk aplikasi java pada handphone seperti produk-produk
Siemens, Nokia, Motorola dll.
2. Salah satu kelemahan CLDC yang merisaukan programmer
adalah tidak adanya dukungan floating point sehingga kreatifitas
programmer sangat diperlukan.
3. CLDC tidak menggambarkan instalasi dan daur hidup sebuah
aplikasi, antarmuka(UI) dan penanganan peristiwa(event
handling).
4. Class file harus dipreverifikasi dan harus berisi informasi
preverifikasi (anda akan menerima runtime error manakala
berusaha mengeksekusi aplikasi yang belum ter preverifikasi).
5. Jar format digunakan manakala sebuah aplikasi CLDC disimpan
pada tempat publik (misalnya disimpan pada sebuah situs web).
Selain format jar hanya mungkin digunakan pada lingkungan
internal saja (missal saat implementasi atau saat network level)
6. Spesifikasi CLDC memerlukan semua class untuk melewati
proses verifikasi dua tingkat. Verifikasi pertama dilaksanakan
diluar perangkat sebelum instalasi pada perangkat. Verifikasi
kedua terjadi pada perangkat selama runtime dan dilaksanakan
oleh KVM.

CLDC 59
Politeknik Telkom Mobile Application

Pilihan Ganda

1. Perangkat yang diincar oleh CLDC mempunyai karateristik :


1. Memory minimal 192kb untuk platform Java.
2. Prosesor dengan 16 atau 32 bit.
3. Mengkonsumsi sedikit daya.
4. Terbatas, koneksi jaringan yang sementara dengan pembatasan
bandwith(biasanya wireless).

a. 1,2,3,4 c. 1,2
b. 1,2,3 d. 1

2. CLDC hanya mendefinisikan tiga class berikut untuk penanganan


kesalahan / exception:
1. class java.lang.Error
2. class java.lang.OutOfMemory
3. class java.lang.VirtualMachineError

a. 1,2,3 c. 1, 3
b. 1,2 d. 2,3

3. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Class file harus dipreverifikasi dan harus berisi informasi preverifikasi
(anda akan menerima runtime error manakala berusaha mengeksekusi
aplikasi yang belum ter preverifikasi).
B. Jar format digunakan manakala sebuah aplikasi CLDC disimpan pada
tempat publik (misalnya disimpan pada sebuah situs web). Selain format
jar hanya mungkin digunakan pada lingkungan internal saja (missal saat
implementasi atau saat network level)

a. Pernyataan A dan B benar


b. Pernyataan A benar dan pernyataan B salah
c. Pernyataan A salah dan Pernyataan B benar
d. Pernyataan A dan B salah

60 CLDC
Politeknik Telkom Mobile Application

4. Class yang diwariskan dari Java 2 Standar Edition Platform adalah paket:
1. java.lang.* (Boolean, Byte, Character, Integer, Long, Math,
Runnable, Runtime, System, StringBuffer).
2. java.util.* (Calendar, Date, Enumeration, Hashtable, Random,
Stack, TimeZone, Vector).
3. java.io.* (berbagai variasi input & output stream readers dan
writers : ByteArrayInput/Output, DataStreamInput/Ouput
Reader/Writer).

a. 1,2,3 c. 1, 3
b. 1,2 d. 2,3

Latihan

1. Sebutkan karakteristik dari perangkat yang diincar oleh CLDC ?


2. Sebutkan area kerja dari The Connected Limited Device Configuration
(CLDC) ?
3. Sebutkan Fitur-fitur tertentu dari J2SE yang dibuang ?
4. Sebutkan paket class pada J2Me yang diwariskan dari Java 2 Standar
Edition Platform?
5. Sebutkan paket class dari J2ME Platform ?

CLDC 61
Politeknik Telkom Mobile Application

4 MIDP

Overview

MIDP (Mobile Information Device Profile) menyediakan librari-librari Java untuk


implementasi dasar antarmuka (GUI), implementasi jaringan, database,
security dan timer. MIDP dirancang khususnya untuk handphone, pager, PDA
dan sebagainya.

Tujuan

Pada akhir bab ini, pelajar diharapkan dapat menguasai :


1. Memahami MIDP (Mobile Information Device Profile)
2. MIDP java platform
3. MIDlets Security
4. MIDlet Packaging

62 MIDP
Politeknik Telkom Mobile Application

4.1 Mobile Information Device Profile (MIDP)

MIDP dikhususkan untuk digunakan pada handset dengan kemampuan


CPU, memori, keyboard dan layer yang terbatas, seperti handphone,
pager, PDA dan sebagainya.

Gambar 4.1 Arsitektur aplikasi MIDP

Pada Gambar 4.1 Menunjukkan bahwa aplikasi yang mendukung


perangkat MIDP adalah aplikasi MIDlet yang juga termasuk bagian dari
Java 2 Micro Edition.

Mobile Information Device Profile (MIDP) berada di atas dari CLDC.


Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan
CLDC API. Anda harus tetap memanfaatkan MIDP yang
mendefinisikan UI.

Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah


digambarkan melalui Java Community Process (JCP). JCP melibatkan
sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang
terdiri atas pabrik perangkat mobile, pengembang software. MIDP
terus berkembang, dengan versi-versi masa depan yang telah lulus dari
proses ketat JCP.

MIDP 63
Politeknik Telkom Mobile Application

Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki


karakteristikkarateristik ini sebagai batas minimum:
 Tampilan:
 Ukuran Layar: 96x54
 kedalaman tampilan: 1-bit
 Ketajaman pixel: sekitar 1:1

 Masukan:
Satu atau lebih mekanisme user-input: satu keybboard, dua
keyboard, atau touch screen

Gambar 4.2 Tampilan Layar Peraltan Mobile

 Memory:
 256 kilobytes of non-volatile memory untuk implementasi
MIDP.
 8 kilobytes of non-volatile memory for application-created
persistent data
 128 kilobytes of volatile memory for the Java runtime (e.g.,
the Java heap)
 Jaringan:
dua jalur, wireless, bandwidth terbatas
 Sound:
Kemampuan untuk memainkan nada-nada

MIDP menggambarkan model aplikasi, UI API, penyimpanan dan


jaringan yang kuat, permainan dan media API, kebijakan keamanan,
penyebaran aplikasi dan ketetapan over-theair.

64 MIDP
Politeknik Telkom Mobile Application

4.2 J2ME Security

4.2.1 Protection Domains


Sebuah protection domains endefinisikan rangkaian permissions yang
disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling
tidak terdapat dua buah protection domains : untrusted dan trusted
domains.

Untrusted domains adalah pembatasan dimana akses terhadap


protected API pada kondisi default tidak diijinkan. Seorang user secara
eksplisit harus mengatur tipe akses MIDlet Suite terhadap API.
Untrusted MIDlets (berjalan di untrusted domains) tidak memerlukan
user permission dalam mengakses protected API.

Untrusted dan trusted domain menyediakan akses yang tak terbatas


pada Record Management, MIDlet life cycle, LDCUI, Game dan
Multimedia API. Bagaimanapun, API untuk koneksi HTTP dan HTTPS
menuntut kejelasan permissions dari user jika MIDlet Suite berjalan
pada untrusted domain.

Sebuah protection domain adalah rangkaian dari ”Allowed” dan


”User” permissions yang diberikan kepada MIDlet Suite.

4.2.2 Permissions
Terdapat dua tipe mode interaksi permissions, mode Allowed dan
User. Pada mode Allowed, user tidak diminta melakukan pengaturan
permission saat MIDlet mengakses sebuah API yang terproteksi.
Sebuah aplikasi secara otomatis memberikan hak akses terhadap
resource dan interaksi dari user tidak diperlukan.

Dalam mode User, device menanyakan apakah user menginginkan


untuk mencabut atau memberikan hak akses MIDlet terhadap
resource. Frekuensi dari pertanyaan bergantung pada mode interaksi
yang dipilih oleh user.

MIDP 65
Politeknik Telkom Mobile Application

4.2.3 Mode Interaksi User


Sebuah user permission memiliki salah satu dari 2 mode interaksi
berikut :

1. Blanket
User memberikan permission pada MIDlet Suite untuk mengakses
resource atau API secara permanen. User tidak akan lagi diminta
melakukan pengaturan setiap MIDlet Suite berjalan. Permission yang
ada akan tetap eksis hingga MIDlet Suite dihapus dari device atau user
merubah permission tersebut.
Membuat sebuah permission adalah salah satu dari cara pengamanan
akses terhadap restricted APIs. Dalam MIDP, nama dari permission
menggunakan nama dari package dari API tersebut sebagai prefix dan
bersifat case sensitive. Jika permission tersebut ditujukan kepada
sebuah class, maka penamaan permission harus mengandung nama
class dan package.
Sebuah MIDlet dapat menuntut adanya permission dengan
mendeklarasikan MIDlet-Permissions ataupun atribut MIDlet-
Permissions-Opt pada application descriptor. Jika MIDlet Suite
menyertakan atribut MIDlet-Permissions, atribut permission tersebut
harus diberi hak akses terhadap protection domain. Jika hak akses
tidak diberikan, maka proses instalasi akan dibatalkan.

Multiple permissions dituliskan menggunakan tanda koma (,) sebagai


pemisah.

MIDlet-Permissions: javax.microedition.io.Connector.http
MIDlet-Permissions-Opt: javax.wireless.messaging.sms.receive,
javax.wireless.messaging.sms.send

Membuat permissions pada MIDlet Suite menggunakan NetBeans


Mobility Pack :

66 MIDP
Politeknik Telkom Mobile Application

Gambar 4.3 Multiple Permissions

Gambar 4.4 Penambahan Permissions

MIDP 67
Politeknik Telkom Mobile Application

2. Trusted MIDlets
Sebuah MIDlet dapat diputuskan sebagai trusted application jika
authentifikasi dan integritas dari file JAR dapat terverifikasi oleh device
dan terbatas pada sebuah protection domain. Proses verifikasi
dilakukan oleh device menggunakan certificates.

Menandai MIDlet pada NetBeans Mobility Pack :

Untuk memberi tanda pada MIDlet Suite menggunakan NetBeans


Mobility Pack, buka project properties (klik kanan project name pada
projects tab dan pilih Properties). Periksa bagian ”Sign Distribution” :

68 MIDP
Politeknik Telkom Mobile Application

4.2.4 Anatomi dari Aplikasi MIDP

APIs yang tersedia bagi suatu aplikasi MIDP datang dari kemasan-
kemasan di dalam kedua-duanya CLDC dan MIDP, seperti yang
ditunjukkan di dalam Gambar 1-2. Bungkus yang ditandai dengan
sebuah lambing + bersifat baru di CLDC 1.1 dan MIDP 2.0. CLDC
menggambarkan suatu inti dari APIs, kebanyakan mengambil dari
lingkup J2SE. Ini memasukkan di dalamnya kelas-kelas bahasa pokok di
javalang, kelas-kelas stream dari java.io, dan koleksi-koleksi sederhana
dari java.util. CLDC juga menetapkan network API di
javax.microedition.io.

Gambar 4.5 MIDP packages

MIDP 69
Politeknik Telkom Mobile Application

Kita dapat menentukan secara bebas memilih alat dari beragam vendor
penyedia untuk mengakses fasilitas-fasilitas pada Java API. Beragam alat-alat
MIDP dengan beragam aplikasi software di gambarkan pada Gambar 4.6.

Gambar 4.6. MIDP software components

Masing-masing alat menerapkan beragam sistem operasi (OS). Aplikasi-


aplikasi berjalan langsung pada lapisan yang sudah didefinisikan terlebih
dahulu di MIDP, dan beragam ala-alat memiliki beragam juga jenis Sistem
Operasinya (OS).

Layered pada bagian atas OS dari alat adalah CLDC (termasuk JVM) dan
MIDP APIs. Aplikasi-aplikasi MIDP digunakan hanya di CLDC dan MIDP APIs.
Aplikasi-aplikasi spesifikasi alat Java boleh juga menggunakan interface API Java
yang disediakan oleh vendor penyedia alat.

4.3 MIDlet

Suatu aplikasi MIDP disebut MIDlet. Perangkat application


management software (AMS) berinteraksi langsung dengan MIDlet
dengan method MIDlet create, start, pause, dan destroy.

70 MIDP
Politeknik Telkom Mobile Application

MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah


MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta
parameter dari AMS seperti dirumuskan dalam application descriptor
(JAD).

Suatu MIDlet tidak harus memiliki (dan memang harus tidak


mempunyai) sebuah method public static void main(String[] argv).
Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik awal
sebuah program.

4.3.1 Arsitektur Aplikasi MIDlet

Paket memiliki class MIDlet yang mendefinisikan MIDP (Mobile


Information Device Profile) dan interaksinya dengan perangkat
handled yang bersangkutan. Class ini merupakan class utama dalam
sebuah MIDlet, yaitu semua aplikasi MIDlet harus merupakan turunan
dari class ini. Class ini merupakan class abstract, sehingga class
turunannya harus mengimplementasikan fungsi-fungsi abstract di
dalamnya, perhatikan kode Java di bawah ini :

package javax.microedition.midlet;
import com.sun.midp.midlet.MIDletState;
import com.sun.midp.midlet.MIDletSuite;
public abstract class MIDlet{
protected MIDlet(){
state = new MIDletProxy(this);
}
protected abstract void startApp() throws
MIDletStateChangeException{
}
protected abstract void pauseApp() {
}
protected abstract void destroyApp(boolean
unconditional) throws
MIDletStateChangeException{
}
public final void notifyDestroyed(){
state.notifyDestroyed();
}
public final void notifyPaused(){
state.notifyPaused();

MIDP 71
Politeknik Telkom Mobile Application

}
public final String getAppProperty(String key){
return state.getMIDletSuite().getProperty(key);
}
public final void resumeRequest(){
state.resumeRequest();
}
Private MIDletProxy state ;
}

Tampak ada tiga fungsi yang bersifat abstract yaitu :

protected abstract void startApp() throws


MIDletStateChangeException{
}
protected abstract void pauseApp() {
}
protected abstract void destroyApp(boolean
unconditional) throws
MIDletStateChangeException{
}

Aplikasi MIDlet sudah pasti merupakan turunan dari class MIDlet


diatas, harus mengimplementasikan tiga fungsi diatas. Itulah mengapa
pada contoh MIDlet HelloWorld diatas, Anda menemukan
implementasi dari fungsi-fungsi tersebut, sekalipun
implementasi fungsi tersebut tidak melakukan apa-apa.
Fungsi-fungsi yang tidak abstract pada class MIDlet bisa Anda gunakan
karena otomatis diturunkan ke aplikasi MIDlet Anda, yakni ;
 public final void notifyDestroyed();
Digunakan oleh MIDlet untuk memberitahukan ke AMS
bahwa MIDlet telah dihancurkan dan dibersihkan dari
memori. Mengenai AMS ini akan dibahas kemudian.
 public final void notifyPaused();
Digunakan oleh MIDlet untuk memberitahukan ke AMS
bahwa MIDlet telah dinonaktifkan sementara (paused).
 public final String getAppProperty(String key);
Digunakan oleh MIDlet untuk mengambil informasi properti
dari AMS sesuai parameter key pada fungsi getAppProperty().

72 MIDP
Politeknik Telkom Mobile Application

 public final void resumeRequest();


Digunakan oleh MIDlet untuk meminta ke AMS agar
diaktifkan kembali.

Ada beberapa istilah penting dalam daur hidup sebuah MIDlet, yaitu:
o Application Management Software
MIDlet berjalan dalam sebuah perangkat handled. Application
Management Software ini merupakan software atau program
bawaan yang ada dalam perangkat handled tersebut untuk
mengatur manajemen aplikasi MIDlet yang ada.
o MIDlet
Merupakan aplikasi yang dijalankan pada sebuah perangkat
handled. MIDlet tidak berinteraksi langsung dengan hardware
dari handphone, Palm atau perangkat handled Anda yang lain,
melainkan berinteraksi melalui Application Management
Software. AMS inilah yang akan menerima sinyal dari MIDlet
bahwa MIDlet akan dijalankan atau berhenti.
o MIDlet State
Merupakan status dari sebuah MIDlet yang akan dijelaskan
kemudian.

4.3.2 Siklus MIDlet

Jika Anda mengenal Java Applet, Anda akan menemukan bahwa Applet
dapat berada dalam status init(), start(), stop() dan run(). Untuk
MIDlet, ada tiga status dalam daur hidup sebuah MIDlet yaitu:

Nama Keterangan
Status
Paused Status ini terjadi ketika MIDlet selesai diinisialisasi dan
tidak melakukan aksi apapun. Pada status ini MIDlet
tidak boleh sedang mengunci suatu sumber daya,
misalnya tidak boleh sedang melakukan locking atau
mengunci sebuah file untuk ditulis yang menyebabkan
proses lain tidak bias menulis ke file tersebut.
Secara garis besar, status MIDlet adalah paused pada
saat:
 Setelah MIDlet dibuat dengan konstruktor
new()

MIDP 73
Politeknik Telkom Mobile Application

 Dari status Active, kemudian berhasil


memanggil fungsi MIDlet.pauseApp()
 Dari status Active, kemudian berhasil
memanggil fungsi MIDlet.notifyPaused()
 Dari status Active, namun ketika akan start()
terjadi kesalahanberupa exception:
MIDletStateChangeException
Active Status ini terjadi ketika MIDlet sedang aktif/berjalan
dengan normal, yakni setelah memanggil fungsi
MIDlet.startApp()
Destroyed Status ini terjadi ketika MIDlet berhenti berjalan
(identik dengan exit) sehingga seluruh sumber daya
yang digunakan akan dibebaskan.
Status ini terjadi ketika berhasil dilakukan pemanggilan
fungsi MIDlet.destroyApp() atau MIDlet.notifyDestroyed()

Jika digambarkan perubahan status dalam daur hidup sebuah MIDlet


adalah seperti gambar berikut :

Gambar 4.7: Daur hidup MIDlet

74 MIDP
Politeknik Telkom Mobile Application

Eksekusi Sebuah MIDlet

Umumnya urutan eksekusi sebuah MIDlet adalah sebagai berikut:


1. AMS (Application Management Software) menginisialisasi sebuah
objek MIDlet, sehingga MIDlet berada pada status Paused.
2. Ketika AMS memutuskan bahwa MIDlet sudah waktunya
dijalankan, maka AMS memanggil fungsi MIDlet.startApp()
sehingga MIDlet akan mulai aktif berfungsi.
3. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan
sementara, maka AMS akan memanggil fungsi MIDlet.pauseApp()
sehingga MIDlet akan berhenti bekerja.
4. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan
selamanya, maka AMS akan memanggil fungsi MIDlet.destroyApp()
sehingga alokasi memori yang digunakan oleh MIDlet yang
bersangkutan akan dibersihkan.

4.3.3 MIDlet suites

Aplikasi-aplikasi MIDlet dibungkus dan dikirim kedalam perangkat


sebagai MIDlet suites. Sebuah MIDlet suite terdiri dari Java Archive
(JAR) dan sebuah tambahan Java Application Descriptor (JAD).

File JAD adalah suatu file teks yang berisi satu set atribut-atribut,
beberapa dibutuhkan.

MIDP 75
Politeknik Telkom Mobile Application

Rangkuman

1. MIDP dikhususkan untuk digunakan pada handset dengan


kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti
handphone, pager, PDA dan sebagainya.
2. Secara singkat MIDP 2.0 adalah MIDP 1.0 + API untuk multimedia
 Akses ke kamera dan perekaman Video
 Mendukung aneka format Audio dan Video
 Memiliki batasan minimum hardware yang lebih tinggi
3. Sebuah protection domains endefinisikan rangkaian permissions yang
disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling
tidak terdapat dua buah protection domains : untrusted dan trusted
domains.
4. Terdapat dua tipe mode interaksi permissions, mode Allowed dan
User. Pada mode Allowed, user tidak diminta melakukan
pengaturan permission saat MIDlet mengakses sebuah API yang
terproteksi. Sebuah aplikasi secara otomatis memberikan hak akses
terhadap resource dan interaksi dari user tidak diperlukan.
5. Sebuah user permission memiliki salah satu dari 2 mode interaksi
berikut :
a. Blanket
b. Trusted MIDlets
6. APIs yang tersedia bagi suatu aplikasi MIDP datang dari kemasan-
kemasan di dalam kedua-duanya CLDC dan MIDP, seperti yang
ditunjukkan di dalam Gambar 1-2. Bungkus yang ditandai dengan
sebuah lambing + bersifat baru di CLDC 1.1 dan MIDP 2.0. CLDC
menggambarkan suatu inti dari APIs, kebanyakan mengambil dari
lingkup J2SE. Ini memasukkan di dalamnya kelas-kelas bahasa pokok
di javalang, kelas-kelas stream dari java.io, dan koleksi-koleksi
sederhana dari java.util. CLDC juga menetapkan network API di
javax.microedition.io.
7. Suatu aplikasi MIDP disebut MIDlet. Perangkat application
management software (AMS) berinteraksi langsung dengan MIDlet
dengan method MIDlet create, start, pause, dan destroy.

76 MIDP
Politeknik Telkom Mobile Application

8. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah


MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta
parameter dari AMS seperti dirumuskan dalam application
descriptor (JAD).
9. Ada beberapa istilah penting dalam daur hidup sebuah MIDlet, yaitu:
o Application Management Software
MIDlet berjalan dalam sebuah perangkat handled. Application
Management Software ini merupakan software atau program
bawaan yang ada dalam perangkat handled tersebut untuk
mengatur manajemen aplikasi MIDlet yang ada.
o MIDlet
Merupakan aplikasi yang dijalankan pada sebuah perangkat
handled. MIDlet tidak berinteraksi langsung dengan hardware
dari handphone, Palm atau perangkat handled Anda yang lain,
melainkan berinteraksi melalui Application Management
Software. AMS inilah yang akan menerima sinyal dari MIDlet
bahwa MIDlet akan dijalankan atau berhenti.
o MIDlet State
Merupakan status dari sebuah MIDlet yang akan dijelaskan
kemudian.

MIDP 77
Politeknik Telkom Mobile Application

Kuis Benar Salah

1. MIDP dikhususkan untuk digunakan pada handset dengan


kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti
handphone, pager, PDA dan sebagainya.
2. Mobile Information Device Profile (MIDP) berada di atas dari CLDC.
Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan
CLDC API. Anda harus tetap memanfaatkan MIDP yang
mendefinisikan UI.
3. Sebuah protection domains endefinisikan rangkaian permissions yang
disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling
tidak terdapat dua buah protection domains : untrusted dan trusted
domains.
4. Sebuah protection domain adalah rangkaian dari ”Allowed” dan
”User” permissions yang diberikan kepada MIDlet Suite.
5. Sebuah user permission memiliki salah satu dari 2 mode interaksi
yaitu Balnket dan Trusted MIDlets
6. Suatu aplikasi MIDP disebut MIDlet. Perangkat application
management software (AMS) berinteraksi langsung dengan MIDlet
dengan method MIDlet create, start, pause, dan destroy.
7. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah
MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta
parameter dari AMS seperti dirumuskan dalam application
descriptor (JAD).
8. Jika Anda mengenal Java Applet, Anda akan menemukan bahwa
Applet dapat berada dalam status init(), start(), stop() dan run().

78 MIDP
Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. MIDP dikhususkan untuk digunakan pada handset dengan kemampuan
CPU, memori, keyboard dan layer yang terbatas, seperti handphone, pager,
PDA dan sebagainya.
B. Mobile Information Device Profile (MIDP) berada di atas dari CLDC.

e. Pernyataan A dan B benar


f. Pernyataan A benar dan pernyataan B salah
g. Pernyataan A salah dan Pernyataan B benar
h. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Terdapat dua tipe mode interaksi permissions, mode Allowed dan User.
Pada mode Allowed, user tidak diminta melakukan pengaturan
permission saat MIDlet mengakses sebuah API yang terproteksi. Sebuah
aplikasi secara otomatis memberikan hak akses terhadap resource dan
interaksi dari user tidak diperlukan.
B. Dalam mode User, device menanyakan apakah user menginginkan untuk
mencabut atau memberikan hak akses MIDlet terhadap resource.
Frekuensi dari pertanyaan bergantung pada mode interaksi yang dipilih
oleh user.

a. Pernyataan A dan B benar


b. Pernyataan A benar dan pernyataan B salah
c. Pernyataan A salah dan Pernyataan B benar
d. Pernyataan A dan B salah

3. Fungsi-fungsi yang tidak abstract pada class MIDlet bisa Anda gunakan
karena otomatis diturunkan ke aplikasi MIDlet Anda, yakni ;
1. public final void notifyDestroyed();
2. public final void notifyPaused();
3. public final String getAppProperty(String key);
4. public final void resumeRequest();

MIDP 79
Politeknik Telkom Mobile Application

a. 1,2,3,4 c. 1,2
b. 1,2,3 d. 1

4. Umumnya urutan eksekusi sebuah MIDlet adalah sebagai berikut:


1. AMS (Application Management Software) menginisialisasi sebuah objek
MIDlet, sehingga MIDlet berada pada status Paused.
2. Ketika AMS memutuskan bahwa MIDlet sudah waktunya dijalankan, maka
AMS memanggil fungsi MIDlet.startApp() sehingga MIDlet akan mulai aktif
berfungsi.
3. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan sementara,
maka AMS akan memanggil fungsi MIDlet.pauseApp() sehingga MIDlet
akan berhenti bekerja.
4. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan selamanya,
maka AMS akan memanggil fungsi MIDlet.destroyApp() sehingga alokasi
memori yang digunakan oleh MIDlet yang bersangkutan akan dibersihkan.

a. 1,2,3,4 c. 1,2,4,3
b. 1,3,4,2 d. 1,3,2,4

80 MIDP
Politeknik Telkom Mobile Application

Latihan

1. Sebutkan spesifikasi MIDP menggambarkan suatu perangkat MIDP


yang memiliki karakteristik-karateristik ini sebagai batas minimum ?
2. Sebutkan 2 mode interkasi dari user permission?
3. Sebutkan 3 status dari siklus MIDlet?

MIDP 81
Politeknik Telkom Mobile Application

5 Integrated Programming Environment

Overview

Pada bagian ini, kita akan menggali tentang menulis, membangun,


menggunakan emulator dan melakukan packaging aplikasi J2ME. Integrated
Programming Environment yang akan kita gunakan adalah NetBeans 4.1
(www.netbeans.org) dan NetBeans Mobility Pack.

Tujuan

Pada akhir bab ini, pelajar diharapkan dapat menguasai :


1. Membuat MIDlet sederhana
2. Membuat sebuah project di NetBeans
3. Membuat sebuah MIDlet menggunakan NetBeans Mobility Pack
4. Menjalankan MIDlet di emulator

82 Integrated Programming Environment


Politeknik Telkom Mobile Application

5.1 Pengenalan

IDE (Integrated Development Environment) adalah sebuah lingkungan


pemrograman (programming environment) yang memiliki GUI builder,
text atau code editor, compiler dan/atau interpreter dan debugger.
Dalam hal ini, NetBeans Mobility Pack juga memiliki device emulator.
Fasilitas ini bisa membuat kita melihat program kita pada device yang
sesungguhnya.

5.2 "Hello, world!" MIDlet

Kita sudah mempelajari pada bagian sebelumnya tentang daur hidup


MIDlet (MIDlet's life cycle). MIDlet mulai hidup ketika MIDlet dibuat
oleh Application Management System (AMS) pada device.
Agar kita dapat membuat MIDlet, kita harus membuat subclass dari
MIDlet class dari javax.microedition.midlet package. Kita juga harus
melakukan override atau implement pada method: startApp(),
destroyApp() dan pauseApp(). Method-method tersebut adalah
method yang diperlukan oleh AMS untuk menjalankan dan
mengkontrol MIDlet.

Gambar 5.1: Daur hidup MIDlet

Integrated Programming Environment 83


Politeknik Telkom Mobile Application

Tidak seperti program Java pada umumnya dimana method main()


hanya digunakan sekali pada jalannya program, method startApp()
mungkin akan dipanggil lebih dari sekali dalam daur hidup MIDlet.
Sehingga Anda diharuskan tidak membuat satu inisialisasi code pada
method startApp(). Daripada, anda dapat membuat MIDlet
consturctor dan melakukan inisialisasi di situ.

Berikut ini adalah code program MIDP pertama kita:

84 Integrated Programming Environment


Politeknik Telkom Mobile Application

Selanjutnya kita akan mempelajari MIDlet pertama kita, difokuskan


pada line yang penting dari code diatas:

public class HelloMidlet extends MIDlet implements


CommandListener {

Seperti yang sudah kita katakan sebelumnya, kita harus membuat


subclass dari MIDlet untuk membuat MIDP program. Pada line ini, kita
sudah membuat subclass dari MIDlet dengan memberikan turunan
kelas induk dan menamakannya HelloMIDlet.

Display display;
Command exitCommand = new Command("Exit",
Command.EXIT, 1);
Alert helloAlert;

Line diatas ini adalah variabel properties dari MIDlet. Kita


membutuhkan object Display (hanya ada satu diplay per MIDlet) untuk
melakukan fungsi menggambar pada layar.
exitCommand adalah perintah yang akan kita taruh pada layar agar kita
dapat keluar dari program. Jika kita tidak memiliki perintah keluar,
maka kita tidak memiliki cara untuk keluar dari MIDlet dengan benar.

public HelloMidlet()
{
helloAlert = new Alert("Hello MIDlet", "Hello,
world!",null, AlertType.INFO);
helloAlert.setTimeout(Alert.FOREVER);
helloAlert.addCommand(exitCommand);
helloAlert.setCommandListener(this);
}

Consturctor melakukan inisialisasi dari object Alert. Kita akan


mempelajari lebih lanjut dari Alert class pada bab berikutnya. Method
addCommand() pada object Alert memberikan perintah "Exit" pada
layar. Method setCommandListener() memberikan informasi kepada
sistem untuk memberikan emua command events ke MIDlet.

public class HelloMidlet extends MIDlet implements


CommandListener {

Integrated Programming Environment 85


Politeknik Telkom Mobile Application

Code "implements CommandListener" adalah untuk command/key


presses, sehingga program kita mampu menghandle "command" events.
Jika kita melakukan implement CommandListener, kita harus membuat
method commandAction().

public void commandAction(Command c, Displayable d)


{
if (c == exitCommand)
{
destroyApp(true);
notifyDestroyed(); // Exit
}
}

commandAction() diatas hanya menghandle request untuk perintah


"Exit".
Method diatas akan menghentikan program menggunakan
notifyDestroyed() jika perintah "Exit" dijalankan atau ditekan.

public void startApp()


{
if (display == null)
{
display = Display.getDisplay(this);
}
display.setCurrent(helloAlert);
}

Code diatas adalah bagian awal dari program kita ketika program kita
sudah siap untuk ditampilkan oleh AMS. Perlu diingat bahwa method
startApp() mungkin / bias dimasukkan lebih dari sekali seperti pada
daur hidup MIDlet. Jika MIDlet berhenti / dihentikan, seperti bila ada
telepon masuk, program akan masuk ke state berhenti (pausedApp).
Jika panggilan sudah selesai AMS akan kembali ke program dan
memanggil method startApp() lagi. Method display.setCurrent()
memberikan informasi ke sistem bahwa kita menginginkan object Alert
untuk dimunculkan ke layar. Kita dapat mendapat tampilah object
dengan memanggil method statis Display.getDisplay().

86 Integrated Programming Environment


Politeknik Telkom Mobile Application

NetBeans Mobility Pack secara otomatis membuat Java Application


Descriptor (JAD) untuk program Anda. NetBeans Mobility Pack
menaruh file JAD pada folder "dist" dari folder project. Berikut ini
adalah contoh file JAD yang dibuat oleh NetBeans Mobility Pack:

MIDlet-1: HelloMidlet, , HelloMidlet


MIDlet-Jar-Size: 1415
MIDlet-Jar-URL: ProjectHello.jar
MIDlet-Name: ProjectHello
MIDlet-Vendor: Vendor
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0

Sekarang kita siap untuk mengcompile, melakukan pemaketan (package)


pada aplikasi MIDlet pertama kita.

5.3 Compilation dan Packaging MIDlets

Sebelum kita menggunakan integrated tools untuk mengcompile dan


melakukan packaging aplikasi MIDlet (MIDlet suite), kita akan mencoba
menggunakan command line.
Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR.
File ini adalah file terkompres, seperti file ZIP. Pada implementasinya,
Anda dapat membuka file JAR menggunakan program dekompresor
file ZIP.
Aplikasi MIDlet terdiri dari:
 File JAR
 File Java Application Descriptor (JAD)

File JAR memiliki:


 File class
 Manifest file describing the contents of the archive
 File manifest yang menjelaskan isi dari arsip
 Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi

Integrated Programming Environment 87


Politeknik Telkom Mobile Application

File manifest, manifest.mf adalah seperti file JAD. File ini digunakan
oleh application manager dari device. Beberapa field yang diperlukan
oleh file manifest adalah:
 MIDlet-Name
 MIDlet-Version
 MIDlet-Vendor
 MIDlet-<n> (dimana n adalah angka dari 1, untuk setiap
MIDlet di file JAR)
 MicroEdition-Profile
 MicroEdition-Configuration

Selanjutnya kita mengcompile file source java:


javac -bootclasspath C:\WTK23\lib\cldcapi11.jar;C:\WTK23\lib\midpapi20.jar *.java

Program Compiler Java, "javac", harus berada pada path Anda. Jika
anda melihat error seperti "cannot find file" atau "not an executable",
Anda bisa mengkonsultasikan dengan panduan instalasi untuk distribusi
Java development kit Anda tentang bagaimana memasukkan executable
PATH dari lokasi tools yang ada di Java.

Selanjutnya kita melakukan pre-verify dari file class:


preverify
-classpath C:\WTK23\lib\cldcapi11.jar;C:\WTK23\lib\midpapi20.jar;.
-d . HelloMidlet

Preverify sudah berada di wireless toolkit dari java.sun.com.


Masukkan perintah ini pada sebuah baris.

Langkah terakhir adalah membuat file JAR tersebut:


jar cvfm HelloMidlet.jar manifest.txt HelloMidlet.class

Program jar sudah berada di Java Development Kit, dan lokasinya


harus dimasukkan pada executeable path Anda. Perintah ini akan
membuat file JAR dengan nama file HelloMidlet.jar. File manifest.txt
namanya diganti dengan manifest.mf pada file JAR.

88 Integrated Programming Environment


Politeknik Telkom Mobile Application

5.4 Menggunakan Sun Wireless Toolkit

Sekarang kita menggunakan Sun Wireless Toolkit untuk mengcompile


dan memaketkan aplikasi MIDlet / MIDlet suite (mengandung satu
MIDlet)
Buka ktoolbar (dari Wireless Toolkit distribution):

Gambar 5.2: ktoolbar

Buat sebuah project:

Gambar 5.3: New Project

Pada Setting window, anda dapat merubah banyak pilihan-pilihan dari


beberapa opsi konfigurasi untuk project Anda. Anda dapat memilih
konfigurasi yang akan bekerja, package/API yang diperlukan, konfigurasi
Push Registry dan yang lain. Untuk tujuan kita kali ini, kita akan
menggunakan konfigurasi default project. Click "OK" untuk selesai
membuat project.

Integrated Programming Environment 89


Politeknik Telkom Mobile Application

Gambar 5.4: Setting window

Copy HelloMidlet.java kedalam direktori "src": Pada jendela ini berada


di direktori:
C:\WTK23\apps\HelloMidlet\src (dimana C:\WTK23 adalah lokasi
Anda menginstall wireless toolkit). Click "Build" dan "Run":

90 Integrated Programming Environment


Politeknik Telkom Mobile Application

Gambar 5.5: Click "Build" dan "Run"

Gambar 5.6: Hasil program Hallo Word di Emulator

Integrated Programming Environment 91


Politeknik Telkom Mobile Application

5.5 Menggunakan NetBeans Mobility Pack

Seperti yang telah dijelaskan pada awal bab ini tentang hal yang
diperlukan, NetBeans 4.1 dan NetBeans Mobility Pack harus sudah
terinstall di komputer Anda.

Langkah 1: Membuat project baru

Gambar 5.7: New Project

92 Integrated Programming Environment


Politeknik Telkom Mobile Application

Langkah 2: Memilih kategori "Mobile"

Gambar 5.8: Memilih Kategori “Mobile”

Langkah 3: Memilih "Mobile Application"

Gambar 5.9: Memilih Kategori “Mobile”

Integrated Programming Environment 93


Politeknik Telkom Mobile Application

Langkah 4: Beri nama project dan tentukan lokasinya


(Hilangkan tanda pada "Create Hello MIDlet", kita akan membuat
MIDlet kita sendiri nantinya)

Gambar 5.10: Memilih Kategori “Mobile”

Langkah 5: Memilih Platform (optional)

Gambar 5.11: Memilih Platform

94 Integrated Programming Environment


Politeknik Telkom Mobile Application

Gambar 5.12: Mobile Project yang baru dibuat (NetBeans Mobility Pack)

Langkah 6: Membuat sebuah MIDlet baru

Gambar 5.13: Membuat Midlet Baru

Integrated Programming Environment 95


Politeknik Telkom Mobile Application

Langkah 7: Memilih MIDP "Category" dan MIDlet "File


Type"

Gambar 5.14: Memilih MIDP "Category" dan MIDlet "File Type"

96 Integrated Programming Environment


Politeknik Telkom Mobile Application

Langkah 8: Memberi nama MIDlet

Gambar 5.15: Memberi Nama MIDlet

Integrated Programming Environment 97


Politeknik Telkom Mobile Application

Langkah 9:

Gambar 5.16: Membuat MIDlet secara otomatis membuat method


MIDlet yang diperlukan

98 Integrated Programming Environment


Politeknik Telkom Mobile Application

Langkah 10: Mengganti code yang dibuat secara otomatis


dengan code program kita.

Gambar 5.17: Mengganti code yang dibuat secara otomatis


dengan code program kita.

Integrated Programming Environment 99


Politeknik Telkom Mobile Application

Langkah 11: Mengcompile dan Menjalankan (Run) MIDlet di


Emulator

Langkah 5.18: Mengcompile dan Menjalankan (Run)


MIDlet di Emulator

100 Integrated Programming Environment


Politeknik Telkom Mobile Application

Langkah 12: Menjalankan MIDlet kita di Emulator

Gambar 5.19: Menjalankan MIDlet kita di Emulator

Integrated Programming Environment 101


Politeknik Telkom Mobile Application

Gambar 5.19: Hello World MIDlet

102 Integrated Programming Environment


Politeknik Telkom Mobile Application

5.6 Bekerja dengan Form


Bekerja dengan Form memungkinkan Anda untuk menampilkan
beberapa komponen GUI semacam daftar pilihan, masukan teks
(textbox) dalam satu layar. Form diimplementasikan oleh class
javax.microedition.lcdui.Form. Form dapat menampung komponen-
komponen yang disebut item dalam satu layar. Item tersebut adalah
textfield, image, date field, gauge dan choice group. Item-item tersebut
merupakan implementasi dari class turunan
Item(javax.microedition.lcdui.Item).

public Form(String title)


public Form(String title, Item[] items)

Konstruktor pertama, menyediakan sebuah form dengan judul form


seperti parameter title yang diberikan, sedangkan konstruktor kedua
mendefinisikan item-item apa saja yang akan ada di form yang akan
dibuat.

Class Item (javax.microedition.lcdui.Item)

Komponen-komponen yang bisa diletakkan dalam sebuah form


merupakan komponenkomponen yang memiliki class yang merupakan
class turunan dari class abstract javax.microedition.lcdui.Item.
Komponen-komponen tersebut adalah:
 ChoiceGroup
Class ini menyediakan komponen yang mirip dengan list, yakni
menyediakan daftar pilihan.
 DateField
Class ini menyediakan komponen untuk memasukkan informasi
tanggal dan waktu.
 Gauge
Class ini menyediakan komponen grafik horisontal yang biasanya
digunakan untuk memberikan gambaran berapa persen proses
berjalan.
 Image dan ImageItem
Class ini menyediakan komponen grafik untuk manipulasi gambar.

Integrated Programming Environment 103


Politeknik Telkom Mobile Application

 StringItem
Class ini menyediakan komponen teks string yang tidak bisa
diedit oleh pengguna.
 TextField
Class ini menyediakan komponen untuk masukan teks string oleh
pengguna.

ChoiceGroup

Class ChoiceGroup(javax.microedition.lcdui.ChoiceGroup) merupakan


class turunan dari class abstract javax.microedition.lcdui.Item yang
menyediakan masukan pilihan (multiple choice) pada layar.
Konstruktor dari class ChoiceGroup ini ada dua yaitu:
public ChoiceGroup(String title, int choiceType)
public ChoiceGroup(String title, int choiceType,
String[] choiceElement, Image[] choiceImages)

Parameter-parameter:
 String title
Untuk memberikan title pada daftar pilihan yang ditampilkan.
 int choiceType
Tipe pilihan yang digunakan dapat berisi:
Choice.EXCLUSIVE
Berarti setiap saat hanya bisa dipilih 1 buah pilihan saja.
Choice.MULTIPLE
Berarti pengguna bisa memilih lebih dari 1 pilihan.
Berbeda dengan class List sebelumnya yang bisa memiliki tipe
Choice.IMPLICIT
class ini tidak memiliki tipe yang bersangkutan.
 String[] choiceElement
Merupakan array dari elemen yang akan ditampilkan
 Image[] choiceImages
Merupakan array dari gambar(javax.microedition.lcdui.Image)
elemen yang akan ditampilkan.

104 Integrated Programming Environment


Politeknik Telkom Mobile Application

Integrated Programming Environment 105


Politeknik Telkom Mobile Application

Pilihan dengan Choice.MULTIPLE Pilihan dengan Choice.EXCLUSIVE

Jika kita gunakan Choice.IMPLICIT pada penggunaan hoiceGroup maka akan


terjadi exception seperti di bawah ini.

106 Integrated Programming Environment


Politeknik Telkom Mobile Application

Rangkuman

IDE (Integrated Development Environment) adalah sebuah lingkungan


pemrograman (programming environment) yang memiliki GUI builder,
text atau code editor, compiler dan/atau interpreter dan debugger.
Dalam hal ini, NetBeans Mobility Pack juga memiliki device emulator.
Fasilitas ini bisa membuat kita melihat program kita pada device yang
sesungguhnya.

Pada bab ini, kita sudah melakukan hal-hal sebagai berikut :


1. Membuat MIDlet sederhana
2. Membuat sebuah project di NetBeans
3. Membuat sebuah MIDlet menggunakan NetBeans Mobility Pack
4. Menjalankan MIDlet di emulator

Integrated Programming Environment 107


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file


JAR. File ini adalah file terkompres, seperti file ZIP. Pada
implementasinya, Anda dapat membuka file JAR menggunakan
program dekompresor file ZIP.
2. Aplikasi MIDlet terdiri dari File JAR dan File Java Application
Descriptor (JAD)
3. File JAR memiliki File class, Manifest file describing the contents of
the archive, File manifest yang menjelaskan isi dari arsip, dan
Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi
4. File manifest, manifest.mf adalah seperti file JAD. File ini digunakan
oleh application manager dari device.
5. Program Compiler Java, "javac", harus berada pada path Anda. Jika
anda melihat error seperti "cannot find file" atau "not an
executable", Anda bisa mengkonsultasikan dengan panduan instalasi
untuk distribusi Java development kit Anda tentang bagaimana
memasukkan executable PATH dari lokasi tools yang ada di Java.
6. Program jar sudah berada di Java Development Kit, dan lokasinya
harus dimasukkan pada executeable path Anda. Perintah ini akan
membuat file JAR dengan nama file HelloMidlet.jar. File manifest.txt
namanya diganti dengan manifest.mf pada file JAR.
7. Bekerja dengan Form memungkinkan Anda untuk menampilkan
beberapa komponen GUI semacam daftar pilihan, masukan teks
(textbox) dalam satu layar.
8. Form diimplementasikan oleh class javax.microedition.lcdui.Form.
9. Form dapat menampung komponen-komponen yang disebut item
dalam satu layar. Item tersebut adalah textfield, image, date field,
gauge dan choice group. Item-item tersebut merupakan
implementasi dari class turunan Item(javax.microedition.lcdui.Item).

108 Integrated Programming Environment


Politeknik Telkom Mobile Application

Pilihan Ganda

5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR.
File ini adalah file terkompres, seperti file ZIP. Pada implementasinya,
Anda dapat membuka file JAR menggunakan program dekompresor file
ZIP.
B. File JAR memiliki File class, Manifest file describing the contents of the
archive, File manifest yang menjelaskan isi dari arsip, dan Sumber:
image/icon, video, data, dll. Digunakan oleh aplikasi

i. Pernyataan A dan B benar


j. Pernyataan A benar dan pernyataan B salah
k. Pernyataan A salah dan Pernyataan B benar
l. Pernyataan A dan B salah

6. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa
komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam
satu layar.
B. Form dapat menampung komponen-komponen yang disebut item dalam
satu layar. Item tersebut adalah textfield, image, date field, gauge dan
choice group. Item-item tersebut merupakan implementasi dari class
turunan Item(javax.microedition.lcdui.Item).

e. Pernyataan A dan B benar


f. Pernyataan A benar dan pernyataan B salah
g. Pernyataan A salah dan Pernyataan B benar
h. Pernyataan A dan B salah

7. File JAR memiliki;


1. File class
2. Manifest file describing the contents of the archive
3. File manifest yang menjelaskan isi dari arsip
4. Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi

Integrated Programming Environment 109


Politeknik Telkom Mobile Application

c. 1,2,3,4 c. 1,2
d. 1,2,3 d. 1

8. Form dapat menampung komponen-komponen yang disebut item dalam


satu layar adalah :
1. ChoiceGroup
2. DateField
3. Gauge
4. Image dan ImageItem
5. StringItem
6. TextField

c. 1,2,3,4,5,6 c. 1,2,5
d. 1,2,3,4,5 d. 2,3,4,5

110 Integrated Programming Environment


Politeknik Telkom Mobile Application

Latihan

1. Multiple MIDlets dalam satu MIDlet suite


Tambahkan satu MIDlet baru pada project "ProjectHello". Perlu
anda catat bahwa NetBeans Mobility Pack secara otomatis
menambahkan MIDlet baru pada aplikasi file JAD ketika anda
menggunakan "New File..." Wizard.

2. Multiple MIDlets dalam satu MIDlet suite menggunakan Wireless


Toolkit
Gunakan Sun Wireless Toolkit untuk menambahkan MIDlet baru
pada aplikasi MIDlet anda.

Integrated Programming Environment 111


Politeknik Telkom Mobile Application

6 High Level User Interface I

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang


disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel.
Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh
paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada
bab sebelumnya, Anda harus mengimport paket ini.

Pada level pemrograman yang lebih tinggi (highlevel), aplikasi MIDlet Anda
akan lebih portabel dengan banyak perangkat handled yang berbeda. Jadi
misalnya Anda mengembangkan sebuah form-form window MIDlet pada
handled Motorola i_85s, jika Anda jalankan aplikasi MIDlet tersebut pada
handled lain, hasilnya akan sama.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Mengetahui keuntungan dan kerugian dengan menggunakan high-level
dan low-level UI classes
2. Mengetahui desain MIDlets menggunakan komponen high-level UI
3. Mengidentifikasi perbedaan sub-classes pada screen
4. Mengetahui perbedaan item-item yang dapat dimasukkan kedalam
sebuah object Form
5. Mengetahui object-object high-level TextBox, DatetField, ImageItem,
Gauge.

112 High Level User Interface


Politeknik Telkom Mobile Application

6.1 MIDP User Interface

MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP


ditunjukan pada area limited screen. Peralatan memory juga menjadi
faktor penting jika perlengkapan mobile hanya memiliki kapasitas
memory yang kecil.

Dengan berbagai macam peralatan mobile, dari berbagai model mobile


phones sampai PDAs, MIDP user interface telah didesain untuk lebih
fleksibel dan mudah digunakan dalam berbagai macam peralatan ini.

MIDP mempunyai class yang dapat menangani fungsi high-level dan


low-level user interface. High-level UI interfaces didesain secara
fleksibel. Penampilan dari komponen ini tidak didefinisikan secara
spesifik. Penampilan screen yang sebenarnya dari berbagai macam
komponen ini digunakan dari satu peralatan ke peralatan yang lain.
Tetapi para programmer telah teryakinkan oleh kegunaan dari high-
level komponen UI interfaces memiliki persamaan dalam berbagai
spesifikasi-pengimplementasi secara keseluruhan.

High Level UI Low-Level UI


highly portable across devices Memungkinkan semua peralatan
look dan feel sama dengan Spesifik aplikasi look and feel
peralatannya
Memiliki interaksi seperti scrolling Pengimplementasiannya harus dengan
yang dienkapsulasi petunjuk sendiri
Penampilannya tidak dapat Penampilannya tidak dapat
digambarkan secara aktual digambarkan
Tidak memiliki akses untuk peralatan Mengakses masukkan low-level hanya
dengan feature yang spesifik dengan menekan

Gambar 6.1: Perbedaan High-Level UI dengan Low-Level UI


Kapan menggunakan High-Level UI
 Saat membangun aplikasi text-based yang mudah
 Saat Anda ingin aplikasi Anda dapat dengan mudah dipertukarkan
dengan berbagai macam peralatan (Portabilitas)
 Saat Anda ingin aplikasi Anda memiliki tampilan yang sama dengan
komponen UI yang lain dari berbagai peralatan

High Level User Interface I 113


Politeknik Telkom Mobile Application

 Saat Anda ingin kode Anda dapat menjadi sesedikit mungkin, ketika
sebuah interaksi ditangani oleh API

Kapan menggunakan Low-Level UI


 Saat Anda memerlukan sebuah high-level untuk mengkontrol
tampilan dari suatu aplikasi
 Saat aplikasi Anda membutuhkan tempat yang tepat dari elemen-
elemen yang ada pada screen
 Saat membuat game secara grafik; meskipun Anda tetap dapat
menggunakan highlevel UI pada menu game, hal tersebut lebih
disarankan untuk membuat menu UI
 Anda sendiri untuk menghindari seamless atmosphere bagi para
user
 Saat sebuah aplikasi membutuhkan akses ke low-level yang memiliki
inputan seperti key presses
 Jika aplikasi Anda akan diimplementasikan pada layar navigasi Anda
sendiri

6.2 Display
Inti dari MIDP user interfaces adalah display. Yang merupakan satu-
satunya kemudahan dari Display per MIDlet. MIDlet dapat
mendapatkan referensi Display object dengan menggunakan method
static Display.getDisplay(), melewatkan referensi tersebut ke MIDlet
instance.

MIDlet dijamin dengan display object tidak akan berubah dengan


adanya eksistensi instance MIDlet. Hal ini berarti bahwa variebel
dikembalikan (returned) ketika Anda memanggil getDisplay() dan tidak
akan berpengaruh jika anda memenggilnya dengan startApp() atau
destroyApp() (Lihat pada gambar Midlet Life Cycle).

6.2.1 Displayable

Hanya satu displayable yang ditampilkan pada satu waktu. Secara


langsung, displayable tidak ditampilkan pada layar. Seuabh displayable
dapat ditampilkan dengan memanggil method setCurrent() dari Display
instance. Method setCurrent() harus dipanggil pada saat memulai

114 High Level User Interface


Politeknik Telkom Mobile Application

aplikasi, dengan kata lain sebuah screen kosong akan ditampilkan atau
aplikasi tersebut tidak akan dijalankan.

Gambar 6.2: MIDlet Life Cycle

Method startApp dari MIDlet merupakan suatu tempat dimana Anda


dapat menaruh method pemanggil setCurrent(). Tetapi Anda harus
mempertimbangkan bahwa dalam MIDlet startApp() dapat dipanggil
lebih dari satu kali. Untuk memberhentikan MIDlet sementara waktu
dapat dipause dengan memanggil fungsi pauseApp(), dengan adanya
incoming call, memungkinkan startApp() dipanggil lagi (setelah ada
telepon masuk).

Maka dengan memanggil setCurrent() pada method pada startApp(),


dan ada kemungkinan layar akan menjadi gelap (blank) pada screen
displayed yang sebelumnya, sampai adanya penghentian sementara
(pause by the phone call).
Sebuah displayable dapat memiliki nama, beberapa
perintah(command), commandListener dan Ticker.

6.2.2 Title
Sebuah Displayable memiliki title yang berhubungan dengan dirinya
sendiri. Posisi dan penampilan dari title tersebut merupakan piranti
spesifik yang hanya dapat ditentukan oleh peralatan dari aplikasi yang
sedang dijalankan. Sebuah title ditampilkan pada Displayable dengan

High Level User Interface I 115


Politeknik Telkom Mobile Application

memanggil setTitle(). Dengan memanggil method ini maka seketika


akan meng-update title pada Displayable. Jika pada saat Displayable
ditampilkan pada layar, MIDP specification states menyebutkan bahwa
title harus dirubah dengan implementasi “Memungkinkan untuk
dilakukan dengan cepat”. Memberi parameter null pada setTitle()
berarti menghapus title pada Displayable.
Merubah atau menghapus sebuah title dari Displayable dapat
mempengaruhi ukuran area untuk isi dari Displayable tersebut.Jika
terjadi perubahan ukuran area terjadi, MIDlet akan diberitahu dengan
memanggil kembali method sizeChanged().

6.2.3 Command
Dengan adanya kekurangan ukuran pada screen, MIDP tidak
menggambarkan sebuah menu bar. Untuk menggantikan menu bar,
MIDlet memiliki commands. Biasanya Command diimplementasikan
sebagai soft key atau item dalam sebuah menu. Object Command
hanya berisi informasi tentang action yang harus dikerjakan pada saat
Command diaktifkan. Dia tidak berisikan kode yang akan dieksekusi
pada saat Command tersebut dipilih.

Gambar 6.3: Properti dari sebuah Displayable

Properti CommandListener dari Displayable berisi action yang akan


dieksekusi saat Command diaktifkan. CommandListener merupakan
interface yang spesifik pada singlemethod :

116 High Level User Interface


Politeknik Telkom Mobile Application

public void commandAction(Command command, Displayable


displayable)

Mapping dari Commands pada peralatan bergantung pada nomer yang


telah ditetapkan atau programable button pada peralatan. Jika nomer
dari Command tidak benar pada semua button, maka memungkinkan
peralatan menaruh beberapa atau semua Command pada menu dan
peta pada menu dan button akan diberi label “Menu”.

Command exitCommand = new Command("Exit", Command.EXIT,


1);
Command newCommand = new Command("New Item", Command.OK,
1);
Command renameCommand = new Command("Rename Item",
Command.OK, 1);
Command deleteCommand = new Command("Delete Item",
Command.OK, 1);
...
list.addCommand(exitCommand);
list.addCommand(newCommand);
list.addCommand(renameCommand);
list.addCommand(deleteCommand);

Gambar 6.4: Contoh tampilan dari multiple Commands

High Level User Interface I 117


Politeknik Telkom Mobile Application

Command memiliki sebuah short label, long label, tipe dan prioritas.

Command Label

Diasumsikan bahwa screen yang berukuran kecil dari target sebuah


peralatan, selalu menjadi faktor ketika membangun aplikasi MIDP.
Asumsi ini juga dapat diterapkan untuk Command label. Command
label harus singkat, namun deskriptif, maka hal itu harus benar pada
screen dan tetap dapat dipahami oleh user.
Ketika long label ditentukan, hal tersebut akan ditampilkan kapan saja
pada saat sebuah implementasi sistem dilihat secara sesuai. Tidak ada
pemanggilan API yang menetapkan label yang akan ditampilkan. Hal
tersebut juga memungkinkan bahwa sebuah Command akan
menampilkan short label pada saat Command lain pada screen yang
sama menampilkan long labels.

Command Type

mmand.OK, Command.BACK,
Command.CANCEL, Command.EXIT,
Command.HELP, Command.ITEM,
Command.SCREEN, Command.STOP

Command Priority

Aplikasi dapat menetapkan spesifikasi Command yang penting pada


priority property. Hal ini merupakan integer property dan nilai
rendah yang sangat penting. Priority property juga hanya sebuah hint
pada tempat dimana seharusnya Command ditempatkan. Biasanya
implementasi menentukan posisi dari Command oleh tipenya. Jika
terdapat lebih dari satu Command dari tipe yang sama, secara normal
priority akan mempertimbangkan penempatan Command.

118 High Level User Interface


Politeknik Telkom Mobile Application

Gambar 6.5: Tampilan Command yang berbeda pada implementasi telepon


yang berbeda

6.2.4 CommandListener

CommandListener merupakan interface dengan single method:

void commandAction(Command command, Displayable displayable)

Method commandAction() akan dipanggil jika Command dipilih.


Variabel Command merupakan referensi Command yang telah dipilih.
Tampilan merupakan Displayable (atau screen) dimana Command
ditempatkan dan saat action “pilih” terjadi. CommandAction() harus
dikembalikan dengan seketika, jika tidak maka pengeksekusian aplikasi
akan diblock. Hal ini dikarenakan, spesifikasi MIDP tidak emerlukan
implementasi untuk membuat sebuah pembatas untuk pengiriman
event.

High Level User Interface I 119


Politeknik Telkom Mobile Application

6.2.5 Ticker

Ticker adalah sebuah baris dari text yang dapat discrolling secara
terus-menerus pada display. Method konstruktor dari ticker
menerima text string untuk ditampilkan. Hal tersebut hanya memiliki
dua method lain, yaitu getter dan setter untuk text ini: String
getString() dan void setString(String text). Tidak ada cara lain pada
sebuah aplikasi untuk mengontrol kecepatan dan arah dari scrolling
text. Scrolling tidak dapat dipause atau distop.

Jika spasi diletakkan pada text, hal tersebut tidak akan ditampilkan
pada layar. Semua baris text akan ditampilkan sebagai single line dari
scrolling text.

Sebuah ticker dapat dipasang pada Displayable dengan memanggil


setTicker(). Jika ticker telah ada pada Displayable, maka akan diganti
oleh ticker yang baru yang terdapat dalam parameter.

Memberi parameter null pada setTicker akan mengganti semua ticker


yang telah dimasukkan pada Displayable. Menghapus ticker dari
Displayable dapat menyebabkan
perubahan ukuran area dari isi Displayable tersebut. Jika perubahan
ukuran area terjadi, maka MIDlet akan memanggil sebuah ukuran
dengan method sizeChanged().
Pada ticker object Displayable boleh berbagi suatu kejadian(action).

6.2.6 Screen

Screen merupakan inti abstrak class yang digunakan untuk high-level


UI ketika canvas merupakan Displayable abstrak class untuk low-level
UI.

Berikut ini empat subclasses dari abstract class screen : Form,


TextBox, List dan Alert.

120 High Level User Interface


Politeknik Telkom Mobile Application

Gambar 6.6: Displayable Class Heirarchy

6.2.7 Item

Items merupakan komponen yang dapat diletakan kedalam container,


seperti Form atau Alert. Sebuah item dapat memiliki property seperti
dibawah ini:

Property Default Value


Label Dikelompokan pada subclass
konstruktor
Commands -
defaultCommand Null
ItemCommandListener Null
Layout directive LAYOUT_DEFAULT
Preferred width and height -1 (unlocked)

High Level User Interface I 121


Politeknik Telkom Mobile Application

Gambar 6.7: Item Class Heirarchy

Spesifikasi layout dari item dengan Form. Direktif layout dapat


dikombinasikan menggunkan bitwise atau operasi (|). Bagaimanapun
juga, beberapa direktif bersifat mutually exclusive. Berikut ini direktif
horizontal alignment yang mutually exclusive:
LAYOUT_LEFT
LAYOUT_RIGHT
LAYOUT_CENTER

Berikut ini direktif vertical alignment yang juga mutually exclusive:


LAYOUT_TOP
LAYOUT_BOTTOM
LAYOUT_VCENTER

Berikut ini layout yang lain dari direktif (tidak mutually exclusive):
LAYOUT_NEWLINE_BEFORE
LAYOUT_NEWLINE_AFTER
LAYOUT_SHRINK
LAYOUT_VSHRINK
LAYOUT_EXPAND
LAYOUT_VEXPAND
LAYOUT_2

6.3 Text Box

TextBox merupakan sub-class dari screen yang dapat digunakan untuk


mendapatkan input text dari user. Hal ini memperbolehkan user untuk
memasukan dan mengedit text. TextBox hampir sama dengan
TextField(Lihat pada item TextField) karena dia dapat memiliki input
constraint dan input modes. Perbedaannya dengan TextField adalah
user dapat memasukan garis baru(ketika input constraint di-set untuk
semua “ANY”).

122 High Level User Interface


Politeknik Telkom Mobile Application

Isi dari TextBox dapat diambil kembali dengan menggunakan method


getString().

Gambar 6.8 :TextBox tipe ANY (multi-line)

Gambar 6.9: TextBox dengan modifikasi PASSWORD

High Level User Interface I 123


Politeknik Telkom Mobile Application

6.4 Form

Bekerja dengan Form memungkinkan Anda untuk menampilkan


beberapa komponen GUI semacam daftar pilihan, masukan teks
(textbox) dalam satu layar. Form diimplementasikan oleh class
javax.microedition.lcdui.Form. Form dapat menampung komponen-
komponen yang disebut item dalam satu layar. Item tersebut adalah
textfield, image, date field, gauge dan choice group. Item-item tersebut
merupakan implementasi dari class turunan
Item(javax.microedition.lcdui.Item).

public Form(String title)


public Form(String title, Item[] items)

Konstruktor pertama, menyediakan sebuah form dengan judul form


seperti parameter title yang diberikan, sedangkan konstruktor kedua
mendefinisikan item-item apa saja yang
akan ada di form yang akan dibuat.

Class Item (javax.microedition.lcdui.Item)

Komponen-komponen yang bisa diletakkan dalam sebuah form


merupakan komponenkomponen yang memiliki class yang merupakan
class turunan dari class abstract javax.microedition.lcdui.Item.
Komponen-komponen tersebut adalah:

 ChoiceGroup
Class ini menyediakan komponen yang mirip dengan list, yakni
menyediakan daftar pilihan.

 DateField
Class ini menyediakan komponen untuk memasukkan informasi
tanggal dan waktu.

 Gauge
Class ini menyediakan komponen grafik horisontal yang biasanya
digunakan untuk memberikan gambaran berapa persen proses
berjalan.

124 High Level User Interface


Politeknik Telkom Mobile Application

 Image dan ImageItem


Class ini menyediakan komponen grafik untuk manipulasi
gambar.

 StringItem
Class ini menyediakan komponen teks string yang tidak bisa
diedit oleh pengguna.

 TextField
Class ini menyediakan komponen untuk masukan teks string
oleh pengguna.

6.5 Date Field

Komponen DateField digunakan untuk masukan tanggal dan waktu dari


user. DateField dapat diisi dengan date entry(mode DATE), time entry
(mode TIME) atau keduanya (mode DATE_TIME).

Method getDate() mengembalikan nilai suatu item. Dia akan


mengembalikan nilai null jika item tidak diinialisasi terlebih dahulu. Jika
mode dari DateField adalah DATE, komponen time dari pengembalian
nilai akan di-set menjadi nol. Jika modenya adalah TIME, komponen
date akan di-set menjadi “Januari 1, 1970”.

dateForm = new Form("DateField Modes");


dateForm.addCommand(backCommand);
dateForm.setCommandListener(this);

DateField dateonly = new DateField("Birthday


(DATE)", DateField.DATE);
DateField timeonly = new DateField("Set Alarm
(TIME)", DateField.TIME);
DateField datetime = new DateField("Departure
(DATE_TIME)", DateField.DATE_TIME);

dateForm.append(dateonly);
dateForm.append(timeonly);
dateForm.append(datetime);

High Level User Interface I 125


Politeknik Telkom Mobile Application

Gambar 6.10: mode DateField dan input screens

6.6 Image Item

ImageItem merupakan Image sederhana yang dapat dimasukan kedalam


komponen, seperti Form. ImageItem menerima item layout sebagai
parameter (Lihat pada bagian Item):

public ImageItem( String label, Image img, int layout,


String altText)

Konstruktor yang lain menerima tampilan mode yang bertipe


Item.PLAIN, Item.HYPERLINK atau Item.BUTTON (Lihat pada bagian
StringItem):

public ImageItem(String label, Image image, int


layout, String altText, int appearanceMode)
imageForm = new Form("ImageItem");
imageForm.addCommand(backCommand);
imageForm.setCommandListener(this);
try {
Image img = Image.createImage("/poltek.png");
ImageItem image = new ImageItem("JENI", img,
Item.LAYOUT_CENTER, "poltek logo");
imageForm.append(image);

126 High Level User Interface


Politeknik Telkom Mobile Application

}
catch (Exception e){e.printStackTrace();}

File “poltek.png” sangat penting untuk dimasukan kedalam project


dengan menggunakan operating system's manager dan menaruh image
tersebut kedalam direktori project dibawah subdirektori “src”.
Kemudian project direfresh dengan mengklik kanan nama project dan
pilih “Refresh Folders”.

Gambar 6.11: ImageItem

High Level User Interface I 127


Politeknik Telkom Mobile Application

6.7 Text Field

TextField merupakan Item dimana user dapat memasukan encode.


Beberapa batasan exclusive yang dapat di-set yaitu:
TextField.ANY
TextField.EMAILADDR
TextField.NUMERIC
TextField.PHONENUMBER
TextField.URL
TextField.DECIMAL

Masukan tersebut juga dapat memiliki macam-macam modifikasi:


TextField.PASSWORD
TextField.UNEDITABLE
TextField.SENSITIVE
TextField.NON_PREDICTIVE
TextField.INITIAL_CAPS_WORD
TextField.INITIAL_CAPS_SENTENCE

Modifikasi dapat di-set dengan menggunakan bit-wise OR (|) operator


(atau toggled menggunakan bit-wise XOR operator ^) pada input
constraint. Sebagai konsekuensinya, modifikasi dapat diperoleh dari
pengembalian nilai dari getConstraint() bit-wise operator AND(&).

Sejak nilai modifikasi juga dikembalikan oleh getConstraint(), Masukan


main constraint dapat diekstrak dengan menggunakan bit-wise
operator AND dengan TextBox.CONSTAINT_mask dan nilai
pengembalian dari getConstaints().

GetString() mengembalikan isi dari TextField sebagai nilai sebuah


String.

textForm = new Form("TextField Types");


textForm.addCommand(backCommand);
textForm.setCommandListener(this);

TextField ANY = new TextField("ANY", "", 64,


TextField.ANY);
TextField EMAILADDR = new TextField("EMAILADDR",
"", 64, TextField.EMAILADDR);
TextField NUMERIC = new TextField("NUMERIC", "",
64, TextField.NUMERIC);

128 High Level User Interface


Politeknik Telkom Mobile Application

TextField PHONENUMBER = new


TextField("PHONENUMBER", "", 64,
TextField.PHONENUMBER);
TextField URL = new TextField("URL", "", 64,
TextField.URL);
TextField DECIMAL = new TextField("DECIMAL", "",
64, TextField.DECIMAL);

textForm.append(ANY);
textForm.append(EMAILADDR);
textForm.append(NUMERIC);
textForm.append(PHONENUMBER);
textForm.append(URL);
textForm.append(DECIMAL);

Gambar 6.12: TextField Items

High Level User Interface I 129


Politeknik Telkom Mobile Application

6.8 Gauge

Objek Gauge merepresentasikan objek batang yang disusun secara


horizontal yang dapat digunakan dalam form untuk merepresentasikan
jalannya sebuah proses dan lain sebagainya. Objek Gauge
diimplementasikan oleh class Gauge (javax.microedition.lcdui.Gauge) yang
merupakan class turunan dari class abstract javax.microedition.lcdui.Item.
Konstruktor dari class Gauge adalah:

public Gauge(String title, boolean interactive, int


maxValue, int initialValue)

Paramater-parameter yang digunakan :


 String title
Untuk memberikan title pada gauge yang ditampilkan
 boolean interactive
Apakah akan ditampilkan secara interaktif atau tidak ? Jika
modenya interaktif user bisa mengubah progress bar yang ada
dan jika modenya tidak interaktif, user tidak bisa mengubah
progress bar yang ada. Agar lebih jelasnya, Anda bisa mengacu ke
contoh yang akan ditunjukkan kemudian.
 int maxValue
Nilai maksimum yang diperbolehkan. Nilai harus > 0
 int initialValue
Nilai awal yang digunakan nilainya antara 0 – nilai maksimum yang
telah didefinisikan.

Program di atas menghasilkan objek Gauge yang tidak interaktif. Ubah


false menjadi true pada pembentukan objek Gauge

g1 = new Gauge("Ini Gauge", false, 15,1);

menjadi

g1 = new Gauge("Ini Gauge", true, 15,1);

maka menghasilkan objek Gauge yang interaktif. Dimana user bisa


mengubah nilai dari objek Gauge.

130 High Level User Interface


Politeknik Telkom Mobile Application

Gambar 6.13: Objek Gauge

Anda bisa mendapatkan informasi apakah progress bar yang Anda buat
bersifat interaktif atau tidak dengan menggunakan fungsi :
• public boolen isInteractive()
Jika dikembalikan true, progress bar bersifat interaktif.

Dari objek Gauge, Anda bisa memperoleh nilai yang sedang ada
sekarang, nilai maksimal yang diperbolehkan dengan fungsi-fungsi
berikut:
• public int getValue()
Menghasilkan nilai integer dari progress bar yang ada
• public int getMaxValue()

High Level User Interface I 131


Politeknik Telkom Mobile Application

Menghasilkan nilai integer maksimum dari progress bar yang ada Selain
itu Anda bisa menetapkan nilai yang sedang ada sekarang, nilai
maksimal yang diperbolehkan dengan fungsi :
• public void setValue(int val)
Menetapkan nilai integer dari progress bar yang ada
• public void setMaxValue(int maxval)
Menetapkan nilai integer maksimum dari progress bar yang ada
Anda juga bisa mengubah label judul dari progress bar yang ada
menggunakan fungsi:
• public void setLabel(String str)
Menetapkan label progress bar yang ada dengan teks string pada
parameter.

132 High Level User Interface


Politeknik Telkom Mobile Application

Rangkuman

MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP


ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor
penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil.

Dengan berbagai macam peralatan mobile, dari berbagai model mobile


phones sampai PDAs, MIDP user interface telah didesain untuk lebih fleksibel
dan mudah digunakan dalam berbagai macam peralatan ini.

MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level
user interface. High-level UI interfaces didesain secara fleksibel. Penampilan
dari komponen ini tidak didefinisikan secara spesifik. Penampilan screen yang
sebenarnya dari berbagai macam komponen ini digunakan dari satu peralatan
ke peralatan yang lain. Tetapi para programmer telah teryakinkan oleh
kegunaan dari high-level komponen UI interfaces memiliki persamaan dalam
berbagai spesifikasi-pengimplementasi secara keseluruhan.

High Level User Interface I 133


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Aplikasi MDIP ditunjukan pada area limited screen. Peralatan


memory juga menjadi faktor penting jika perlengkapan mobile hanya
memiliki kapasitas memory yang kecil.
2. MIDP mempunyai class yang dapat menangani fungsi high-level dan
low-level user interface.
3. Screen merupakan inti abstrak class yang digunakan untuk high-level
UI ketika canvas merupakan Displayable abstrak class untuk low-
level UI.
4. Form diimplementasikan oleh class javax.microedition.lcdui.Form.
5. Komponen DateField digunakan untuk masukan tanggal dan waktu
dari user. DateField dapat diisi dengan date entry(mode DATE),
time entry (mode TIME) atau keduanya (mode DATE_TIME).
6. Objek Gauge diimplementasikan oleh class Gauge
(javax.microedition.lcdui.Gauge) yang merupakan class turunan dari
class abstract javax.microedition.lcdui.Item.

134 High Level User Interface


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


C. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR.
File ini adalah file terkompres, seperti file ZIP. Pada implementasinya,
Anda dapat membuka file JAR menggunakan program dekompresor file
ZIP.
D. File JAR memiliki File class, Manifest file describing the contents of the
archive, File manifest yang menjelaskan isi dari arsip, dan Sumber:
image/icon, video, data, dll. Digunakan oleh aplikasi

m. Pernyataan A dan B benar


n. Pernyataan A benar dan pernyataan B salah
o. Pernyataan A salah dan Pernyataan B benar
p. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


C. Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa
komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam
satu layar.
D. Form dapat menampung komponen-komponen yang disebut item dalam
satu layar. Item tersebut adalah textfield, image, date field, gauge dan
choice group. Item-item tersebut merupakan implementasi dari class
turunan Item(javax.microedition.lcdui.Item).

i. Pernyataan A dan B benar


j. Pernyataan A benar dan pernyataan B salah
k. Pernyataan A salah dan Pernyataan B benar
l. Pernyataan A dan B salah

3. High Level UI memiliki karakteristik;


1. highly portable across devices
2. look dan feel sama dengan peralatannya
3. Memiliki interaksi seperti scrolling yang dienkapsulasi
4. Penampilannya tidak dapat digambarkan secara aktual

High Level User Interface I 135


Politeknik Telkom Mobile Application

5. Tidak memiliki akses untuk peralatan dengan feature yang spesifik

e. 1,2,3,4,5 c. 1,2,3
f. 1,2,3,4 d. 1,3

4. Kapan menggunakan High-Level UI :


1. Saat membangun aplikasi text-based yang mudah
2. Saat Anda ingin aplikasi Anda dapat dengan mudah dipertukarkan dengan
berbagai macam peralatan (Portabilitas)
3. Saat Anda ingin aplikasi Anda memiliki tampilan yang sama dengan
komponen UI yang lain dari berbagai peralatan
4. Saat Anda ingin kode Anda dapat menjadi sesedikit mungkin, ketika
sebuah interaksi ditangani oleh API

e. 1,2,3,4 c. 1,2,4
f. 1,2,3 d. 2,3,4

136 High Level User Interface


Politeknik Telkom Mobile Application

Latihan

List Dinamis

Buatlah sebuah MIDlet yang memiliki List IMPLICIT sebagai Screen main.
Masukan tiga Command kedalam List ini - “Add Item”, “Remove Item” dan
“Exit”. Comman “Add Item” akan memberikan layanan pada user untuk
memasukan list menggunakan TextBox, kemudian insert item tersebut
sebelum current item yang dipilih dari list. “Remove Item” akan menghapus
currently selected list item (getSelectedIndex). Command “Exit” akan keluar
dari program.

High Level User Interface I 137


Politeknik Telkom Mobile Application

7 High Level User Interface II

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang


disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel.
Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh
paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada
bab sebelumnya, Anda harus mengimport paket ini.

Pada level pemrograman yang lebih tinggi (highlevel), aplikasi MIDlet Anda
akan lebih portabel dengan banyak perangkat handled yang berbeda. Jadi
misalnya Anda mengembangkan sebuah form-form window MIDlet pada
handled Motorola i_85s, jika Anda jalankan aplikasi MIDlet tersebut pada
handled lain, hasilnya akan sama.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. ChoiceGroup
2. List
3. Alert
4. High level user interface API

138 High Level User Interface II


Politeknik Telkom Mobile Application

7.1 ChoiceGroup

Item Choicegroup merupakan group dari selectable choice. Sebuah


choice boleh berisi sebuah text, gambar atau kedua-duanya.
Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau
MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu). Jika
ChoiceGroup bertipe POPUP, hanya satu choice yang ditampilkan.
Popup selection akan ditampilkan ketika item ini dipilih. Dari popup
seleksi ini, user diperbolehkan memilih pilihannya. Choice yang
ditampilkan selalu choice yang dipilih.

GetSelectedIndex() mengembalikan nilai index pada element dari


ChoiceGroup yang dipilih. GetSelectedFlags() mengembalikan sebuah
array dariboolean yang merespon elemen dari Choicegroup.
isSelected(int index) mengembalikan state dari elemen yang diberikan
oleh posisi index.

choiceForm = new Form("Choice Group Types");


choiceForm.addCommand(exitCommand);
choiceForm.setCommandListener(this);

choiceExclusive = new ChoiceGroup("Exclusive",


Choice.EXCLUSIVE);
choiceExclusive.append("Male", null);
choiceExclusive.append("Female", null);
choiceForm.append(choiceExclusive);

choiceMultiple = new ChoiceGroup("Multiple",


Choice.MULTIPLE);
choiceMultiple.append("Apple", null);
choiceMultiple.append("Orange", null);
choiceMultiple.append("Grapes", null);
choiceForm.append(choiceMultiple);

choicePopup = new ChoiceGroup("Popup",


Choice.POPUP);
choicePopup.append("Asia", null);
choicePopup.append("Europe", null);
choicePopup.append("Americas", null);
choiceForm.append(choicePopup);

High Level User Interface II 139


Politeknik Telkom Mobile Application

Gambar 7.1: Tipe dari Choice Group

7.2 List

List merupakan subclass dari screen yang berisi sebuah daftar dari
suatu pilihan. Sebuah list dapat dibagi menjadi tiga tipe: IMPLICIT,
EXCLUSIVE atau MULTIPLE.
Jika List bertipe IMPLICIT dan user mengeksekusi tombol “select”,
commandAction() dari list commandListener akan dipanggil. Default
perintahnya adalah list.SELECT_COMMAND.
Untuk tipe IMPLICIT dan EXCLUSIVE, GetSelectedIndex()
mengembalikan index dari element yang dipilih. Untuk tipe MULTIPLE,
getSelectedFlags() mengembalikan sebuah array dari boolean yang
berisi state dari elemen-elemen. isSelected(int index) mengembalikan
state dari elemen dalam pemberian posisi index.

140 High Level User Interface II


Politeknik Telkom Mobile Application

Gambar 7.2: Tipe-tipe List

High Level User Interface II 141


Politeknik Telkom Mobile Application

7.3 Alert

Alert merupakan sebuah screen yang dapat menampilkan text dan


gambar. Alert merupakan komponen untuk menampilkan error dan
warning, display text dan informasi gambar atau untuk mendapatkan
informasi dari user.

Alert ditampilkan untuk spesifikasi peeriode dari waktu. Waktu di-set


menggunakan method setTimeout() dan method tersebut
dispesifikasikan dalam unit millliseconds. Hal tersebut dapat dibuat
untuk ditampilkan hingga user mengaktifkan perintah (“Done”) dengan
menspesifikasikan spesial timeout dari Alert.FOREVER.

Alert juga dapat menampilkan komponen Gauge (Lihat pada Gauge


item) sebagai indikator.

Ketika alert berisi text yang tidak sesuai dengan screenful dan harus
discroll, maka secara otomatis alert menge-set ke modal(timeout di
set kepada Alert.FOREVER).

142 High Level User Interface II


Politeknik Telkom Mobile Application

High Level User Interface II 143


Politeknik Telkom Mobile Application

Gambar 7.3: Perbedaan tipe-tipe Alert.

7.4 String Item

StringItem merupakan komponen read-only. Dia terdiri dari label dan


text. Secara bebas StringItem menerima tampilan mode parameter.
Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK atau
Item.BUTTON. Jika tampilan sebuah mode bertipe HYPERLINK atau
BUTTON, default Command dan ItemCommandListener harus di-set
didalam Item.

stringForm = new Form("StringField Modes");


stringForm.addCommand(exitCommand);

144 High Level User Interface II


Politeknik Telkom Mobile Application

stringForm.setCommandListener(this);

StringItem plain = new StringItem("Plain", "Plain


Text", Item.PLAIN);
StringItem hyperlink = new StringItem("Hyperlink",
"http://www.sun.com", Item.HYPERLINK);
hyperlink.setDefaultCommand(new Command("Set",
Command.ITEM, 0));
hyperlink.setItemCommandListener(this);
StringItem button = new StringItem("Button", "Click
me", Item.BUTTON);
button.setDefaultCommand(new Command("Set",
Command.ITEM, 0));
button.setItemCommandListener(this);
stringForm.append(plain);
stringForm.append(hyperlink);
stringForm.append(button);

Gambar 7.4: StringItem

7.5 Jenis Fungsi-Fungsi API pada MIDP untuk GUI

Untuk menampilkan sesuatu pada layar misalnya tulisan, form dan


sebagainya Anda harus mengakses display dari handled yang dapat
diakses dengan class javax.microedition.lcdui.Display. Objek kedua

High Level User Interface II 145


Politeknik Telkom Mobile Application

adalah screen yang berbeda dengan display. Screen digunakan untuk


menangani komponen-komponen GUI, misalnya window, form,
dialogbox dan menangani masukan dari pengguna misalnya dari keypad.

Objek screen ini direpresentasikan dengan class


javax.microedition.lcdui.Screen. Pada setiap waktu hanya satu objek
screen yang bisa ditampilkan oleh objek Display, untuk menampilkan
digunakan fungsi setCurrent() pada objek Dispaly.

Gambar 7.5 : paket pada javax.microedition dan javax.microedition.lcdui.game


Ada 3 tipe screen pada MIDlet yaitu:
• Complex Screen Object
Tipe ini mengatur komponen-komponen GUI yang sudah tidak
bisa ditambahi oleh komponen screen yang lain. Misalnya screen
yang berisi objek ListBox untuk meminta masukan user, tidak
akan bisa diisi dengan objek lain.
• Generic Screen Object
Tipe ini mengatur komponen-komponen GUI Form, yang bisa
ditambahi oleh komponen screen yang lain. Misalnya screen
yang berisi objek Form, maka Anda kemudian bisa
menambahkan komponen-komponen lain pada Form tersebut.
• Low Level Screen Object, yakni yang digunakan oleh subclass
javax.microedition.lcdui.Graphics dan
javax.microedition.lcdui.Screen

146 High Level User Interface II


Politeknik Telkom Mobile Application

Rangkuman

MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP


ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor
penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil.

Dengan berbagai macam peralatan mobile, dari berbagai model mobile


phones sampai PDAs, MIDP user interface telah didesain untuk lebih fleksibel
dan mudah digunakan dalam berbagai macam peralatan ini.

MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level
user interface. High-level UI interfaces didesain secara fleksibel. Penampilan
dari komponen ini tidak didefinisikan secara spesifik. Penampilan screen yang
sebenarnya dari berbagai macam komponen ini digunakan dari satu peralatan
ke peralatan yang lain. Tetapi para programmer telah teryakinkan oleh
kegunaan dari high-level komponen UI interfaces memiliki persamaan dalam
berbagai spesifikasi-pengimplementasi secara keseluruhan.

Untuk menampilkan sesuatu pada layar misalnya tulisan, form dan sebagainya
Anda harus mengakses display dari handled yang dapat diakses dengan class
javax.microedition.lcdui.Display. Objek kedua adalah screen yang berbeda
dengan display. Screen digunakan untuk menangani komponen-komponen
GUI, misalnya window, form, dialogbox dan menangani masukan dari
pengguna misalnya dari keypad.

High Level User Interface II 147


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Item Choicegroup merupakan group dari selectable choice. Sebuah


choice boleh berisi sebuah text, gambar atau kedua-duanya.
2. Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau
MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu).
3. List merupakan subclass dari screen yang berisi sebuah daftar dari
suatu pilihan. Sebuah list dapat dibagi menjadi tiga tipe: IMPLICIT,
EXCLUSIVE atau MULTIPLE.
4. Jika List bertipe IMPLICIT dan user mengeksekusi tombol “select”,
commandAction() dari list commandListener akan dipanggil. Default
perintahnya adalah list.SELECT_COMMAND.
5. Alert merupakan sebuah screen yang dapat menampilkan text dan
gambar.
6. Alert merupakan komponen untuk menampilkan error dan warning,
display text dan informasi gambar atau untuk mendapatkan informasi
dari user.
7. Alert juga dapat menampilkan komponen Gauge sebagai indikator.
8. StringItem merupakan komponen read-only. Dia terdiri dari label
dan text.
9. Secara bebas StringItem menerima tampilan mode parameter.
Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK
atau Item.BUTTON. Jika tampilan sebuah mode bertipe
HYPERLINK atau BUTTON, default Command dan
ItemCommandListener harus di-set didalam Item.
10. Screen digunakan untuk menangani komponen-komponen GUI,
misalnya window, form, dialogbox dan menangani masukan dari
pengguna misalnya dari keypad.
11. Objek screen ini direpresentasikan dengan class
javax.microedition.lcdui.Screen.
12. Ada 3 tipe screen pada MIDlet yaitu Complex Screen Object,
Generic Screen Object, Low Level Screen Object, yakni yang
digunakan oleh subclass.

148 High Level User Interface II


Politeknik Telkom Mobile Application

Pilihan Ganda

5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Item Choicegroup merupakan group dari selectable choice. Sebuah
choice boleh berisi sebuah text, gambar atau kedua-duanya.
B. Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau
MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu).

q. Pernyataan A dan B benar


r. Pernyataan A benar dan pernyataan B salah
s. Pernyataan A salah dan Pernyataan B benar
t. Pernyataan A dan B salah

6. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Secara bebas StringItem menerima tampilan mode parameter.
Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK
atau Item.BUTTON. Jika tampilan sebuah mode bertipe
HYPERLINK atau BUTTON, default Command dan
ItemCommandListener harus di-set didalam Item.
B. StringItem merupakan komponen read-only. Dia terdiri dari label
dan text.

m. Pernyataan A dan B benar


n. Pernyataan A benar dan pernyataan B salah
o. Pernyataan A salah dan Pernyataan B benar
p. Pernyataan A dan B salah

7. Ada 3 tipe screen pada MIDlet yaitu;


1. Complex Screen Object
2. Generic Screen Object
3. Low Level Screen Object, yakni yang digunakan oleh subclass.

g. 1,2,3 c. 1,2
h. 1,2 d. 2,3

High Level User Interface II 149


Politeknik Telkom Mobile Application

8. Secara bebas StringItem menerima tampilan mode parameter. Tampilan


dari mode dapat berupa :
5. Item.PLAIN
6. Item.HYPERLINK
7. Item.BUTTON

g. 1,2,3 c. 1,2
h. 3,2 d. 3

Latihan

1. Buatlah program ChoiceGroup untuk pemilihan agama dari lima jenis


agama (Islam, Kristen, Protestan, Budha, Hindu)
2. Buatlah program List untuk menampilkan daftar jenis warna dasar
(merah, kuning, biru).

150 High Level User Interface II


Politeknik Telkom Mobile Application

8 Low Level User Interface I

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang


disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel.
Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh
paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada
bab sebelumnya, Anda harus mengimport paket ini.

Pada level pemrograman yang lebih rendah (lowlevel), Anda akan


mendapatkan fungsional yang lebih spesifik ke jenis handled yang digunakan.
Hal ini memungkinkan kurangnya portabilitas MIDlet yang Anda buat,
misalnya Anda membuat MIDlet pada handled Motorola i_85s, MIDlet
tersebut belum tentu bisa dijalankan dengan baik pada handled lain. Mirip
sekali pada game-game pada handphone Nokia 5110, misalnya Snake yang jika
dicoba pada handphone Ericsson T10S tidak akan jalan. Class-class untuk
pemrograman GUI pada level yang lebih rendah ini diimplementasikan oleh
class javax.microedition.lcdui.Canvas dan javax.microedition.lcdui.Graphics.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Memahami event handling level rendah dalam MIDP
2. Menggambar dan menampilkan teks, gambar, garis, kotak, dan
sudut
3. Menentukan warna, huruf, dan coretan untuk operasi
menggambar
4. Memahami dan menggunakan class Canvas dan Graphic

Low Level User Interface I 151


Politeknik Telkom Mobile Application

8.1 Pengenalan

Pada bab sebelumnya, kita telah membahas tentang bagaimana cara


membuat user interface level tinggi seperti list, form, dan field input.
Mereka bersifat user interface level tinggi dan programmer tidak perlu
khawatir tentang menggambar pixel layar atau mengatur posisi teks
pada layar. Semua program telah menetapkan jenis komponen dan
label elemen. Sistem tersebut akan menangani gambar pada layar,
scrolling dan layout.

Satu kelemahan ketika hanya menggunakan komponen user interface


level tinggi adalah program tidak memiliki kendali penuh sebuah layar.
Ada saat dimana kita ingin menggambar sebuah garis, gambar
beranimasi dan mempunyai kendali untuk mengatur pixel pada layar.

Pada bab ini, kita akan berhadapan langsung dengan layar. Kita akan
mempelajari class Canvas, dimana akan menjadi pendukung dari proses
menggambar kita. Kita juga akan menyelidiki ke dalam class Graphic,
dimana memiliki metode untuk menggambar garis, kotak, sudut, dan
teks. Kita juga akan membahas huruf, warna dan gambar.

8.2 Canvas
Canvas adalah subclass dari Displayable. Itu adalah sebuah class
abstrak yang harus di-extend sebelum sebuah aplikasi dapat
menggunakan fungsi-fungsi yang ada.

Canvas dapat digabungkan dengan subclass Displayable level tinggi


yaitu Screen.

Program dapat pindah ke dan dari Canvas dan Screen.

Canvas menggambarkan metode-metode event handling kosong.


Aplikasi harus mengesampingkan mereka untuk handle event.

Class Canvas menggambarkan sebuah metode abstrak yang disebut


paint(). Aplikasi menggunakan class Canvas harus menyediakan sebuah
implementasi untuk metode paint().

152 Low Level User Interface I


Politeknik Telkom Mobile Application

8.2.1 Sistem Koordinat


Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y
dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (0,0).
Koordinat x bertambah dari kiri ke kanan. Sedangkan koordinat y
bertambah dari atas ke bawah. Metode getWidth() dan getHeight()
mengembalikan nilai lebar dan tinggi berturut-turut.

Pojok kanan bawah pada layar memiliki koordinat getWidth()-


1,getWidth()-1).

Setiap perubahan yang terjadi pada ukuran yang diberikan untuk area
menggambar pada Canvas dilaporkan kepada aplikasi oleh metode
sizeChanged(). Ukuran yang tersedia pada Canvas mungkin saja
berubah jika ada pergantian antara mode layar full dan normal atau
penambahan dan pengurangan sebuah komponen seperti Command.

Gambar 8.1: Sistem Koordinat

Low Level User Interface I 153


Politeknik Telkom Mobile Application

8.2.2 ”Hello,World!”

Gambar 8.2: Hello World MIDlet menggunakan canvas

154 Low Level User Interface I


Politeknik Telkom Mobile Application

Dengan midlet “Hello,World!”, kita membuat sebuah class yang ber-


extend Canvas

class HelloCanvas extends Canvas implements


CommandListener {

Kemudian kita menambahkan perintah (“Exit”) dan mengatur


command listener nya.

addCommand(exitCommand);
setCommandListener(this);

Low Level User Interface I 155


Politeknik Telkom Mobile Application

Kita menciptakan command listener dengan mengimplementasikan


class CommandListener. Ini berarti membuat class yang memiliki
metode commandAction.

class HelloCanvas extends Canvas implements


CommandListener {
...
public void commandAction(Command c, Displayable d)
{
...

Inti dari program ini adalah metode paint(). Set pertama dari
pemanggilan metode adalah membersihkan layar.

g.setColor(255, 255, 255 );


g.fillRect(0, 0, getWidth(), getHeight());

Dan kemudian grafik memanggil metode drawString() untuk


menampilkan “Hello,World!” pada layar :

// mengatur warna tulisan dengan warna hitam


g.setColor(0, 0, 0);

// dan menulis sebuah text


g.drawString(text, getWidth()/2, getHeight()/2,
Graphics.TOP | Graphics.HCENTER);

8.2.3 Perintah

Seperti halnya list, textBox, dan form, Canvas juga mempunyai


Command yang disediakan dan dapat merespon untuk event
Command. Langkah-langkah untuk menambahkan Command ke dalam
Canvas adalah sama :
1. Buatlah objek Command.
private Command exitCommand = new Command("Exit",
Command.EXIT, 0);

2. Gunakan useCommand() untuk menambahkan perintah ke dalam


canvas(atau Form, list, text box)
addCommand(exitCommand);

156 Low Level User Interface I


Politeknik Telkom Mobile Application

3. Gunakan setCommandListener() untuk mendaftarkan class mana


yang akan mendapat event command untuk perintah dalam
Displayable.
setCommandListener(this);

4. Buatlah sebuah commandListener dengan mengimplementasikan


class commandListener dan menyediakan sebuah metode
commandAction().

class HelloCanvas extends Canvas implements


CommandListener
{
...
public void commandAction(Command c, Displayable
d)
{
if (c == exitCommand)
{ // do something }

8.3 Grafik
Class Graphic adalah class utama untuk menulis teks, menggambar,
garis, kotak dan sudut. Dia memiliki metode untuk menentukan warna,
huruf, dan coretan.

8.3.1 Warna
Class Display memiliki metode untuk menentukan apakah sebuah
perangkat memiliki fasilitas yang mendukung layar berwarna atau layar
monochrome pada sebuah perangkat.

public boolean isColor() Mengembalikan nilai true jika mendukung


layar berwarna dan sebaliknya.
public int numColors() Mengembalikan nomor warna(atau level
abu-abu jika sebuah perangkat tidak
mendukung warna) yang didukung
sebuah perangkat

Low Level User Interface I 157


Politeknik Telkom Mobile Application

Untuk mengatur warna yang digunakan untuk metode grafik


berikutnya, gunakan metode setColor(). SetColor() memiliki dua
bentuk:
public void setColor(int red, int green, int blue)
public void setColor(int RGB)

Pada bentuk pertama, Anda menentukan komponen warna merah,


hijau, dan biru. Pada bentuk kedua komponen warna ditentukan dalam
bentuk 0x00RRGGBB. Pemanggilan setColor(int) pada contoh
berikut akan melakukan hal yang sama:

int red, green, blue;


...
setColor(red, green, blue);
setColor( (red<<16) | (green<<8) | blue );

Metode lainnya untuk memanipulasi warna adalah :

public int getColor() Mengembalikan warna terbaru


dalam bentuk integer.
public int getRedComponent() Mengembalikan komponen merah
sebagai warna terbaru
public int getGreenComponent() Mengembalikan komponen hijau
sebagai warna terbaru
public int getBlueComponent() Mengembalikan komponen biru
sebagai
public int getColor() Mengembalikan warna terbaru
dalam bentuk integer.
warna terbaru
public int getGrayScale() Mengembalikan nilai abu-abu
sebagai warna terbaru
public void setGrayScale(int value) Memilih nilai abu-abu untuk
mengganti operasi menggambar

158 Low Level User Interface I


Politeknik Telkom Mobile Application

8.3.2 Huruf

Sebuah huruf memiliki tiga atribut yaitu bentuk, type, dan ukuran.
Huruf tidak diciptakan oleh aplikasi. Sebagai antinya, sebuah aplikasi
meminta sistem untuk memilih model atribut huruf dan sistem
mengembalikan huruf yang sesuai dengan model atribut yang diminta.
Sistem tidak menjamin akan mengembalikan semua atribut huruf yang
dipili. Jika sistem tidak memiliki huruf yang sesuai dengan permintaan,
dia akan mengembalikan sebuah huruf hampir mirip dengan atribut
yang diminta.

Huruf adalah sebuah class yang terpisah. Seperti yang dinyatakan di


atas, aplikasi tidak menciptakan objek huruf. Sebagai gantinya, metode-
metode statis getFont() dan getDefaultFont() digunakan untuk
meminta sebuah huruf dari sistem.
public static Font Mengembalikan sebuah huruf
getFont(int face, int style, int size) dari sistem yang sesuai dengan
atribut
public static Font getDefaultFont() Mengembalikan huruf default yang
digunakan oleh sistem public static
Font
getFont(int fontSpecifier) Mengembalikan huruf yang
digunakan untuk komponen UI level
tinggi. FontSpecifier bisa jadi :
FONT_INPUT_TEXT
Atau
FONT_STATIC_TEXT

Face adalah salah satu dari FACE_SYSTEM, FACE_MONOSPACE,


atau FACE_PROPORTIONAL.

Style bisa jadi STYLE_PLAIN atau kombinasi STYLE_BOLD,


STYLE_ITALIC dan STYLE_UNDERLINED. Kombinasi style
ditentukan oleh penggunaan bitwise operator OR (|). Sebuah style
huruf tebal(bold) dan garis miring(italic) dideklarasikan sebagai:

STYLE_BOLD | STYLE_ITALIC

Low Level User Interface I 159


Politeknik Telkom Mobile Application

Ukuran huruf bisa jadi : SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE


Metode ini mengembalikan atribut huruf tertentu:

public int getStyle()


public int getFace()
public int getSize()
public boolean isPlain()
public boolean isBold()
public boolean isItalic()
public boolean isUnderlined()

8.3.3 Style Coretan

Metode setStrokeStyle(int style) menetapkan style coretan bahwa


akan digunakan untuk menggambar garis, sudut, dan kotak. Style
coretan tidak mempengaruhi teks, gambar, dan operasi mewarnai.

public void Mengatur style coretan untuk


setStrokeStyle(int style) menggambar garis, sudut, kotak, dll
public int getStrokeStyle() Mengembalikan style coretan terbaru

Nilai valid untuk style adalah SOLID dan DOTTED.

8.3.4 Menggambar garis

Satu-satunya metode grafik untuk menggambar garis didefinisikan


sebagai :

public void drawLine(int x1, int y1, int x2, int y2)

Metode ini menggambar sebuah garis menggunakan warna yang


tersedia dan coretan antara koordinat (x1,y1) dan (x2,y2).

g.setColor(255, 0, 0); // red


// garis dari pojok kiri atas ke pojok kanan bawah layar
g.drawLine(0, 0, getWidth()-1, getHeight()-1);
g.setColor(0, 255, 0); // green
160 Low Level User Interface I
Politeknik Telkom Mobile Application

// garis horisontal pada tengah layar


g.drawLine(0, getHeight()/2, getWidth()-1, getHeight()/2);
g.setColor(0, 0, 255); // blue
// garis horisontal pada bawah layar
g.drawLine(0, getHeight()-1, getWidth()-1, getHeight()-1);
g.setColor(0, 0, 0); // black
// garis dari pojok kiri bawah ke pojok kanan atas layar
g.drawLine(0, getHeight()-1, getWidth()-1, 0);

Gambar 8. 5: Hasil menggambar garis

Low Level User Interface I 161


Politeknik Telkom Mobile Application

8.3.5 Menggambar kotak

Metode grafik untuk menggambar kotak adalah :

public void drawRect(int x, int y, int width, int


height)
public void drawRoundRect(int x, int y, int width,
int height, int arcWidth, int arcHeight)
public void fillRect(int x, int y, int width, int
height)
public void fillRoundRect(int x, int y, int width,
int height, int arcWidth, int arcHeight)

Metode drawRect() menggambar sebuah kotak dengan pojok kiri atas


pada koordinat (x,y) dan luas area (width+1 x height+1). Parameter
yang sama ada bersama drawRoundRect(). Parameter tambahan
arcWidth dan arcHeight adalah diameter horisontal dan vertikal dari
busur dari keempat sudut.
Jika Anda akan mengenali, definisi drawRect dan drawRoundRect
menetapkan lebar dari kotak yang digambar pada layar adalah dengan
width+1 dan tingginya dengan height+1. Hal ini sangat tidak intuitif,
tetapi seperti itulah spesifikasi MIDP menggambarkan metode ini.
Untuk meng-agravate tidak konsistensi dari “off-byone” ini, metode
fillRect dan fillRoundRect hanya mengisi sebuah area kotak (width x
height). Anda akan melihat ketidakcocokan ini jika anda memasukkan
parameter yang sama untuk drawRect dan fillRect (dan
drawRoundRect vs fillRoundRect). Sisi kanan dan bawah dari kotak
digambar oleh kepalsuan drawRect di luar area yang diisi oleh fillRect.

// menggunakan tinta hitam untuk drawRect


g.setColor(0, 0, 0);
g.drawRect(8, 8, 64, 32);
// menggunakan tinta kuning untuk fillrect
// untuk menampilkan perbedaan antara drawRect dan
fillrect
g.setColor(255, 255, 0);

g.fillRect(8, 8, 64, 32);

162 Low Level User Interface I


Politeknik Telkom Mobile Application

Gambar 8.6: hasil dari penggunaan


parameter yang sama untuk drawRect dan fillRect

// mewarnai warna pena dengan warna hitam


g.setColor(0, 0, 0);
// menggambar kotak pada (4,8) dengan lebar 88 dan
tinggi 44
// kotak pada kiri atas
g.drawRect(4,8,88,44);
// elips pada kanan atas
g.drawRoundRect(108,8,88,44,18,18);
// kotak pada kiri bawah
g.fillRect(4,58,88,44);
// elips pada kanan bawah
g.fillRoundRect(108,58,88,44,18,18);

Low Level User Interface I 163


Politeknik Telkom Mobile Application

Gambar 8.7: drawRect(), fillRect(),


drawRoundRect(), dan fillRoundRect()

8.3.6 Menggambar Sudut

Metode untuk menggambar bundar atau eclips adalah :

public void drawArc(int x, Menggambar arc dengan pusat


int y, int width, int height, pada (x,y) dan dimensi (width+1
int startAngle, int arcAngle) x height+1). Arc digambar mulai
dari startAngle dan extend untuk
derajat arcAngle. 0 derajat
terletak pada jarum jam 3.
public void fillArc(int x, Mewarnai bidang bundar dan
int y, int width, int height, eclips yang
int startAngle, int arcAngle) telah dibuat dengan warna yang
tersedia.

164 Low Level User Interface I


Politeknik Telkom Mobile Application

g.setColor(255, 0, 0);
g.drawArc(18, 18, 50, 50, 0, 360); //
menggambar sebuah lingkaran
g.setColor(0, 255, 0);
g.drawArc(40, 40, 100, 120, 0, 180);
g.setColor(0, 0, 255);
g.fillArc(100, 200, 80, 100, 0, 90);

Gambar 8.8: Hasil pemanggilan metode drawArc dan fillArc

Low Level User Interface I 165


Politeknik Telkom Mobile Application

8.3.7 Melukis gambar

Gambar digambar dengan metode drawImage() public void


drawImage(Image img, int x, int y, int anchor).

Selama dengan drawString, x dan y adalah koordinat titik anchor.


Perbedaannya adalah bahwa vertikal anchor tetap adalah VCENTER
yang berdasar BASELINE.

Anchor harus berupa kombinasi dari horizontal constant(LEFT,


HCENTER atau RIGHT) dan vertical constant (TOP,VCENTER atau
BOTTOM). Horizontal dan Vertical Constants dikombinasikan dengan
menggunakan operator bitwise OR(|).

Gambar 8.9: Image Anchor Points

166 Low Level User Interface I


Politeknik Telkom Mobile Application

try {
Image image = Image.createImage("/jedi.png");
g.drawImage(image,
getWidth()/2, getHeight()/2,
Graphics.VCENTER | Graphics.HCENTER);
} catch (Exception e){}

Gambar 8.11: Output dari drawImage()

Low Level User Interface I 167


Politeknik Telkom Mobile Application

Rangkuman

Paket javax.microedition.lcdui juga menyediakan fungsi-fungsi yang


memungkinkan kita untuk menggambar garis, titik dan elemen-elemen
dasar lain dengan menggunakan class Canvas.

Class Canvas merupakan class yang menyediakan fungsi-fungsi untuk


manajemen antarmuka pada level rendah handled. Class ini merupakan
class abstract sehingga kita harus membuat class turunannya dulu
untuk melakukan manajemen antarmuka pada level rendah. Class
Canvas merupakan class abstract sekaligus turunan dari class
Displayable.

Penggunaan class Canvas umumnya bersamaan dengan class Graphics.


Class Graphics yang menyediakan objek-objek Grafik dan fungsi-fungsi
untuk memanipulasi grafik level rendah.

Pada bab Low Level User Interface ini diharapkan siswa dapat
menguasai :
1. Memahami event handling level rendah dalam MIDP
2. Menggambar dan menampilkan teks, gambar, garis, kotak, dan
sudut
3. Menentukan warna, huruf, dan coretan untuk operasi
menggambar
4. Memahami dan menggunakan class Canvas dan Graphic

168 Low Level User Interface I


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Satu kelemahan ketika hanya menggunakan komponen user interface


level tinggi adalah program tidak memiliki kendali penuh sebuah
layar.
2. Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y
dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (0,0).
3. Koordinat x bertambah dari kiri ke kanan. Sedangkan koordinat y
bertambah dari atas ke bawah. Metode getWidth() dan getHeight()
mengembalikan nilai lebar dan tinggi berturut-turut.
4. Class Graphic adalah class utama untuk menulis teks, menggambar,
garis, kotak dan sudut. Dia memiliki metode untuk menentukan
warna, huruf, dan coretan.
5. Class Display memiliki metode untuk menentukan apakah sebuah
perangkat memiliki fasilitas yang mendukung layar berwarna atau
layar monochrome pada sebuah perangkat.
6. Huruf adalah sebuah class yang terpisah. Seperti yang dinyatakan di
atas, aplikasi tidak menciptakan objek huruf. Sebagai gantinya,
metode-metode statis getFont() dan getDefaultFont() digunakan
untuk meminta sebuah huruf dari sistem.
7. Metode setStrokeStyle(int style) menetapkan style coretan bahwa
akan digunakan untuk menggambar garis, sudut, dan kotak. Style
coretan tidak mempengaruhi teks, gambar, dan operasi mewarnai.

Low Level User Interface I 169


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Satu kelemahan ketika hanya menggunakan komponen user interface
level tinggi adalah program tidak memiliki kendali penuh sebuah
layar.
B. Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y
dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat
(100,100).

u. Pernyataan A dan B benar


v. Pernyataan A benar dan pernyataan B salah
w. Pernyataan A salah dan Pernyataan B benar
x. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut


A. Class Graphic adalah class utama untuk menulis teks, menggambar,
garis, kotak dan sudut. Dia memiliki metode untuk menentukan
warna, huruf, dan coretan.
B. Class Display memiliki metode untuk menentukan apakah sebuah
perangkat memiliki fasilitas yang mendukung layar berwarna atau
layar monochrome pada sebuah perangkat.

q. Pernyataan A dan B benar


r. Pernyataan A benar dan pernyataan B salah
s. Pernyataan A salah dan Pernyataan B benar
t. Pernyataan A dan B salah

170 Low Level User Interface I


Politeknik Telkom Mobile Application

3. Karakteristik dari Low Level UI adalah ;


1. Memungkinkan semua peralatan
2. Spesifik aplikasi look and feel
3. Pengimplementasiannya harus dengan petunjuk sendiri
4. Penampilannya tidak dapat digambarkan
5. Mengakses masukkan low-level hanya dengan menekan

i. 1,2,3 c. 1,2,3,4
j. 1,2,4 d. 1,2,3,4,5

4. Kapan kita harus menggunakan Low Level UI:


1. Saat Anda memerlukan sebuah high-level untuk mengkontrol
tampilan dari suatu aplikasi
2. Saat aplikasi Anda membutuhkan tempat yang tepat dari elemen-
elemen yang ada pada screen
3. Saat membuat game secara grafik; meskipun Anda tetap dapat
menggunakan highlevel UI pada menu game, hal tersebut lebih
disarankan untuk membuat menu UI
4. Anda sendiri untuk menghindari seamless atmosphere bagi para
user
5. Saat sebuah aplikasi membutuhkan akses ke low-level yang memiliki
inputan seperti key presses
6. Jika aplikasi Anda akan diimplementasikan pada layar navigasi Anda
sendiri

i. 1,2,3,4 c. 1,2,3,4,5,6
j. 3,4,5,6 d. 1,2,3,4,5

Low Level User Interface I 171


Politeknik Telkom Mobile Application

Latihan

Key Codes
Buatlah sebuah MIDlet yang akan menampilkan kode dan nama dari tombol
yang ditekan oleh user. Gunakan sebuah Canvas dan tempatkan keterangan
kode dan nama tepat di tengah dari tampilan pada layer.

172 Low Level User Interface I


Politeknik Telkom Mobile Application

9 Low Level User Interface II

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang


disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel.
Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh
paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada
bab sebelumnya, Anda harus mengimport paket ini.

Pada level pemrograman yang lebih rendah (lowlevel), Anda akan


mendapatkan fungsional yang lebih spesifik ke jenis handled yang digunakan.
Hal ini memungkinkan kurangnya portabilitas MIDlet yang Anda buat,
misalnya Anda membuat MIDlet pada handled Motorola i_85s, MIDlet
tersebut belum tentu bisa dijalankan dengan baik pada handled lain. Mirip
sekali pada game-game pada handphone Nokia 5110, misalnya Snake yang jika
dicoba pada handphone Ericsson T10S tidak akan jalan. Class-class untuk
pemrograman GUI pada level yang lebih rendah ini diimplementasikan oleh
class javax.microedition.lcdui.Canvas dan javax.microedition.lcdui.Graphics.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Memahami dan menggunakan The Graphics Clip, Rendering
Text, Images, dan Event Handling
2. Multithreading and the User Interface
3. Mengetahui bagaimana menggunakan GAME API
4. Menggambar grafik berskala

Low Level User Interface I 173


Politeknik Telkom Mobile Application

9.1 Event key

Subclass dari Canvas dapat merespon sebuah event tombol dengan


metode-metode sebagai berikut :

keyPressed(int keyCode) Dipanggil ketika kunci ditekan


keyRepeated(int keyCode) Dipanggil ketika kunci diulang
keyReleased(int keyCode) Dipanggil ketika kunci dilepas

Canvas mendefinisikan kode tombol ini : KEY_NUM0, KEY_NUM1,


KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6,
KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_STAR, and
KEY_POUND.

Untuk mendapatkan “String” nama sebuah kunci, gunakan metode


getKeyName(int keyCode).

9.2 Aksi Permainan


Masing-masing kode tombol bisa dipetakan menjadi sebuah aksi game.
Sebuah key code bisa dipetakan kepada aksi sebuah game. Class
Canvas mendefinisikan aksi game ini : UP, DOWN, LEFT, RIGHT,
FIRE, GAME_A, GAME_B, GAME_C, GAME_D.

Sebuah program dapat menerjemahkan sebuah key code ke dalam aksi


game menggunakan metode getGameAction(keyCode).

Metode getKeyCode(int gameAction) mengembalikan key code yang


berkaitan dengan suatu aksi game. Sebuah aksi game dapat memiliki
lebih dari satu key code yang berkaitan dengannya. Jika terdapat lebih
dari satu key code yang berkaitan dengan aksi game, hanya satu key
code yang akan dikembalikan.

Sebuah aplikasi perlu menggunakan getGameAction(int keyCode)


daripada langsung menggunakan kode tombol yang telah didefinisikan.
Secara normal, jika suatu program ingin merespon kunci “UP”,
sebaiknya menggunakan kunci KEY_NUM2 atau key code yang spesifik
untuk tombol UP. Program menggunakan metode ini tidaklah portable

174 Low Level User Interface I


Politeknik Telkom Mobile Application

sejak sebuah perangkat memiliki layout kunci yang berbeda dan key
code yang berbeda pula. KEY_NUM2 mungkin menjadi kunci “UP”
untuk sebuah perangkat, tetapi mungkin juga menjadi kunci “LEFT”
untuk perangkat lainnya. GetGameAction() akan selalu mengembalikan
“UP”, tidak terikat pada kunci mana yang ditekan selama dia adalah
kunci “UP” di dalam konteks dari layout kunci sebuah perangkat.

9.3 Event Pointer

Disamping dari event key, program MIDP juga dapat mengatasi event
pointer. Hal ini bersifat benar jika sebuah perangkat memiliki sebuah
pointer dan hal tersebut diimplementasikan di dalam sistem JAVA pada
sebuah perangkat.
Metode hasPointerEvents() mengembalikan nilai true jika sebuah
perangkat mendukung pointer yang bersifat ditekan dan dilepaskan.
Metode hasPointerMotionEvents() mengembalikan nilai true jika
sebuah perangkat mendukung event gerakan dari pointer.

public boolean hasPointerEvents()


public boolean hasPointerMotionEvents()

Sebuah event dapat di-generate oleh aktivitas pointer sebagai berikut :


pointerPressed, pointerReleased dan pointerDragged. Sebuah aplikasi
mengesampingkan metode-metode yang untuk diperhatikan ketika
event ini terjadi. Koordinat (x,y) dari event (ketika pointer ditekan,
dilepas atau digeser) ditetapkan didalam metode-metode callback ini.

protected void pointerPressed(int x, int y)


protected void pointerReleased(int x, int y)
protected void pointerDragged(int x, int y)

Low Level User Interface I 175


Politeknik Telkom Mobile Application

9.4 Clipping

Suatu bidang clipping adalah suatu kotak di dalam objek Graphics yang
ada. Setiap operasi grafik hanya akan mempengaruhi pixel-pixel
didalam area clip. Pixel yang berada diluar clipping tidak akan
dipengaruhi oleh setiap operasi grafik.

public void Mengatur area clip yang


setClip(int x, int y, int width, int tersedia menjadi kotak,
height) ditentukan oleh koordinat
public int getClipX() Mengembalikan offset X dari area clip
yang tersedia, sehubungan dengan
awal mula dari konteks grafik ini
public int getClipY() Mengembalikan offset Y dari area clip
yang tersedia
public int getClipWidth() Mengembalikan lebar dari area clip
yang tersedia
public int getClipHeight() Mengembalikan tinggi dari area clip
yang tersedia

9.5 Anchor Points

Teks digambar sesuai dengan sebuah anchor points. Metode


drawString() mengharap sebuah koordinat (x,y) sesuai dengan anchor
points.

public void drawString(String str, int x, int y, int anchor)

Anchor harus suatu kombinasi horisontal yang konstan


(LEFT,HCENTER, atau RIGHT) dan vertikal yang konstan (TOP,
BASELINE, atau BOTTOM). Horisontal dan vertikal
yang konstan harus dikombinasikan mengunakan operator bitwise OR
(|). Ini berarti menggambar teks berhubungan dengan baseline dan
horisontal tengah akan membutuhkan sebuah nilai anchor BASELINE |
HCENTER.

176 Low Level User Interface I


Politeknik Telkom Mobile Application

Gambar 9.1: titik anchor teks

9.6 Menggambar Teks

Metode untuk menggambar teks dan karakter adalah :

public void Menggambar teks dalam str


drawString(String str, menggunakan warna dan huruf yang
int x, tersedia. (x,y) adalah koordinat titik
int y, anchor
int anchor)
public void Sama seperti drawString, kecuali ini
drawSubstring(String str, hanya akan menggambar substring dari
int offset, offset (berbasis nol) dengan panjang
int len, length.
int x,
int y,
int anchor)

Low Level User Interface I 177


Politeknik Telkom Mobile Application

public void Menggambar karakter dengan warna dan


drawChar(char character, huruf yang tersedia
int x,
int y,
int anchor)
public void Menggambar karakter dalam data array
drawChars(char[] data, karakter, dimulai dari indeks offset
int offset, dengan panjang length
int length,
int x,
int y,
int anchor)

Berikut adalah beberapa metode dari Font yang berguna dalam menggambar
teks:

public int getHeight() Mengembalikan tinggi teks dalam huruf ini.


Tinggi dikembalikan termasuk spasi ekstra.
Hal ini memastikan bahwa dua teks
digambar dengan jarak ini dari titik anchor ke
titik anchor lainnya akan berisi cukup ruang
antara dua baris teks.
public int Mengembalikan lebar total dalam pixel dari
stringWidth(String ruang yang ditempati oleh string ini jika
str) digambar menggunakan huruf ini
public int Mengembalikan lebar total dalam pixel dari
charWidth(char ch) ruang yang ditempati oleh karakter ini jika
digambar menggunaka huruf ini
public int Mengembalikan jarak dalam pixel antara
getBaselinePosition() TOP dan BASELINE pada teks, berdasarkan
pada huruf ini

g.setColor(255, 0, 0); // merah


g.drawString("JEDI",
getWidth()/2, getHeight()/2,
Graphics.TOP | Graphics.HCENTER);
g.setColor(0, 0, 255); // biru

178 Low Level User Interface I


Politeknik Telkom Mobile Application

Font font = g.getFont();


g.drawString("Java Education & Development
Initiative",
getWidth()/2, getHeight()/2+font.getHeight(),

Graphics.TOP | Graphics.HCENTER);

Gambar 9.2: Hasil operasi drawString()

9.7 Game API

9.7.1 Game API

Aplikasi games memiliki peranan utama pada aplikasi mobile. Sebagian


besar aplikasi dibuat pada pangsa pasar mobile adalah games. Action,
strategy, board and card games dan sebagainya, seluruhnya terdapat
pada aplikasi mobile.

Sebagian besar produsen game telah membuat API tersendiri untuk


berbagai fungsi bermain game yang hanya akan bekerja pada handset
yang dibuat oleh perusahaan tersebut. Hal ini berarti bahwa sebuah

Low Level User Interface I 179


Politeknik Telkom Mobile Application

game yang dibangun menggunakan API dari salah satu produsen tidak
akan berjalan pada device hasil produksi dari produsen lain.

Untuk menjembatani perbedaan ini, MIDP versi 2 telah memiliki


fungsionalitas dasar yang secara spesifik ditujukan aplikasi game. Class
utama Game API dari MIDP adalah class GameCanvas. Class
GameCanvas merupakan perluasan dari class Canvas yang kita gunakan
dalam pembuatan low – level user interface. Dua kelemahan utama
dari class Canvas dalam pemrograman game adalah tidak memadainya
kemampuan untuk mengatur proses repaint dan ketidakmampuan
untuk mengatur bagaimana pointer events serta quick keys diteruskan
pada canvas.

Komponen user interface dari MIDP umumnya berupa event driven.


Events berupa antrian berurutan dan diteruskan terhadap aplikasi satu
persatu, beserta tunda waktu antar waktu dimana event dibuat (key
press).

GameCanvas memungkinkan aplikasi mengumpulkan events yang


terbuat dan melakukan proses repaint pada canvas dengan cepat.
Struktur program menjadi lebih bersih karena terdapat rangkaian
perulangan utama dimana proses painting dan pengumpulan events
dilakukan. GameCanvas menggunakan teknik double buffering.
Seluruh proses pembuatan interface dilakukan di off-screen buffer,
kemudian di transfer dari area buffer tersebut menuju area yang
terlihat pada canvas. Aplikasi anda harus menggunakan instance
method dari class Graphics berupa method getGraphics(). Setiap
pemanggilan terhadap method ini mengembalikan sebuah instance baru
dari offscreen buffer yang anda gunakan dalam proses pembuatan user
interface.

Untuk memperbaharui screen tersebut, anda harus memanggil


flushGraphics() untuk melakukan proses repaint secara cepat dengan
isi dari off-screen buffer. Perhatikan bahwa anda hanya perlu
memanggil method getGraphics() sekali saja, karena sebuah buffer
teralokasi setiap kali anda memanggil method ini.

180 Low Level User Interface I


Politeknik Telkom Mobile Application

MyCanvas.java :

Low Level User Interface I 181


Politeknik Telkom Mobile Application

GameMidlet.java:

9.7.2 Layers

Layers adalah elemen visual dari sebuah screen. Layer adalah abstract
class yang merepresentasikan objects pada screen. Sprite dan
TiledLayer adalah subclasses dari class Layer.

Tiled Layer adalah rangkaian dari beberapa persegi empat yang


berukuran sama dan gambar – gambar yang memadai untuk
ditempatkan pada persegi empat tersebut.

Layer ini dibangun dengan menempatkan gambar – gambar dan elemen


– elemen visual dalam area ini. Sebuah gambar dapat digunakan oleh
lebih dari satu persegi empat sehingga dapat menghemat ruang dan
memory. Tiled Layers umumnya digunakan sebagai background pada
game.

182 Low Level User Interface I


Politeknik Telkom Mobile Application

9.7.3 Sprites

Sprites adalah objects grafis yang anda lihat pada game. Object ini
dapat berupa character, kunci, tombol, pintu ataupun peluru. Sebuah
sprite bersifat statis ataupun animasi.

Animasi sprite terbuat dari beberapa elemen sprite dengan perbedaan


– perbedaan kecil dan tersusun sedemikian hingga membentuk kesan
bergerak. Rangkaian sprite ini disebut sebagai frame.

Contoh kode berikut ini (dari Project Game2) mendemonstrasikan


cara penggunaan sprites. Program ini menggunakan sprite sederhana
dengan dua frame. Frame ditampilkan menurut penekanan tombol
oleh user (UP, DOWN, LEFT atau RIGHT).

Low Level User Interface I 183


Politeknik Telkom Mobile Application

GameCanvas dengan Sprite :

184 Low Level User Interface I


Politeknik Telkom Mobile Application

Low Level User Interface I 185


Politeknik Telkom Mobile Application

9.7.4 LayerManager

Class LayerManager akan memberikan kemudahan dalam pengaturan


keseluruhan Sprites dan TiledLayers. LayerManager mengatur seluruh
Sprites dan TiledLayers yang anda buat. Dan anda tidak perlu untuk
membuat seluruh object tersebut satu persatu. LayerManager yang
akan melakukannya untuk anda. LayerManager juga mengatur
pengurutan objek dari dasar hingga paling atas.

9.8 Scalable 2D Graphics

JSR 226 menyediakan method untuk proses rendering dan


transforming atas grafis vector-based 2D.

Format gambar raster-based seperti GIF melakukan proses encode


terhadap pewarnaan pada tiap-tiap pixel pada area persegi empat yang
menunjukkan bentuk gambar. Gambar dengan tipe vector-based hanya
memiliki instruksi penggambaran yang menentukan bagaimana pixel-
pixel dari gambar tersebut harus diwarnai.

Vector tersebut merepresentasikan sebuah gambar yang berukuran


jauh lebih kecil, sebuah nilai lebih dalam penggunaan resource pada
mobile devices.

186 Low Level User Interface I


Politeknik Telkom Mobile Application

Rangkuman

Paket javax.microedition.lcdui juga menyediakan fungsi-fungsi yang


memungkinkan kita untuk menggambar garis, titik dan elemen-elemen
dasar lain dengan menggunakan class Canvas.

Class Canvas merupakan class yang menyediakan fungsi-fungsi untuk


manajemen antarmuka pada level rendah handled. Class ini merupakan
class abstract sehingga kita harus membuat class turunannya dulu
untuk melakukan manajemen antarmuka pada level rendah. Class
Canvas merupakan class abstract sekaligus turunan dari class
Displayable.

Penggunaan class Canvas umumnya bersamaan dengan class Graphics.


Class Graphics yang menyediakan objek-objek Grafik dan fungsi-fungsi
untuk memanipulasi grafik level rendah.

Pada bab Low Level User Interface ini diharapkan siswa dapat
menguasai :
1. Memahami dan menggunakan The Graphics Clip, Rendering
Text, Images, dan Event Handling
2. Multithreading and the User Interface
3. Mengetahui bagaimana menggunakan GAME API
4. Menggambar grafik berskala

Low Level User Interface I 187


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Sebuah program dapat menerjemahkan sebuah key code ke dalam


aksi game menggunakan metode getGameAction(keyCode).
2. Metode getKeyCode(int gameAction) mengembalikan key code yang
berkaitan dengan suatu aksi game.
3. Metode hasPointerEvents() mengembalikan nilai true jika sebuah
perangkat mendukung pointer yang bersifat ditekan dan dilepaskan.
Metode hasPointerMotionEvents() mengembalikan nilai true jika
sebuah perangkat mendukung event gerakan dari pointer.
4. Suatu bidang clipping adalah suatu kotak di dalam objek Graphics
yang ada. Setiap operasi grafik hanya akan mempengaruhi pixel-pixel
didalam area clip.
5. Teks digambar sesuai dengan sebuah anchor points. Metode
drawString() mengharap sebuah koordinat (x,y) sesuai dengan
anchor points.
6. Untuk menjembatani perbedaan ini, MIDP versi 2 telah memiliki
fungsionalitas dasar yang secara spesifik ditujukan aplikasi game.
Class utama Game API dari MIDP adalah class GameCanvas.
7. Layers adalah elemen visual dari sebuah screen. Layer adalah
abstract class yang merepresentasikan objects pada screen. Sprite
dan TiledLayer adalah subclasses dari class Layer.
8. Sprites adalah objects grafis yang anda lihat pada game. Object ini
dapat berupa character, kunci, tombol, pintu ataupun peluru. Sebuah
sprite bersifat statis ataupun animasi.
9. Class LayerManager akan memberikan kemudahan dalam pengaturan
keseluruhan Sprites dan TiledLayers.
10. JSR 226 menyediakan method untuk proses rendering dan
transforming atas grafis vector-based 2D.

188 Low Level User Interface I


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Sebuah program dapat menerjemahkan sebuah key code ke
dalam aksi game menggunakan metode
getGameAction(keyCode).
B. Metode getKeyCode(int gameAction) mengembalikan key code
yang berkaitan dengan suatu aksi game.

y. Pernyataan A dan B benar


z. Pernyataan A benar dan pernyataan B salah
aa. Pernyataan A salah dan Pernyataan B benar
bb. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Tiled Layer adalah rangkaian dari beberapa persegi empat yang
berukuran sama dan gambar – gambar yang memadai untuk
ditempatkan pada persegi empat tersebut.
B. Layer ini dibangun dengan menempatkan gambar – gambar dan
elemen – elemen visual dalam area ini. Sebuah gambar dapat
digunakan oleh lebih dari satu persegi empat sehingga dapat
menghemat ruang dan memory. Tiled Layers umumnya
digunakan sebagai background pada game.

u. Pernyataan A dan B benar


v. Pernyataan A benar dan pernyataan B salah
w. Pernyataan A salah dan Pernyataan B benar
x. Pernyataan A dan B salah

3. Subclass dari Canvas dapat merespon sebuah event tombol dengan


metode-metode sebagai berikut :
1. keyPressed(int keyCode)
2. keyRepeated(int keyCode)

Low Level User Interface I 189


Politeknik Telkom Mobile Application

3. keyReleased(int keyCode)

k. 1,2,3 c. 2,3
l. 1,2 d. 1,3

4. Berikut adalah beberapa metode dari Font yang berguna dalam


menggambar teks:
1. public int getHeight()
2. public int stringWidth(String str)
3. public int charWidth(char ch)
4. public int getBaselinePosition()

k. 1,2,3,4 c. 1,2,3
l. 3,4 d. 3,4

190 Low Level User Interface I


Politeknik Telkom Mobile Application

Latihan

Buatlah program dengan low level UI untuk menampilkan string “Hello


World” dengan warna latar merah seperti pada gambar dibawah.

Low Level User Interface I 191


Politeknik Telkom Mobile Application

10 Networking (Socket/TCP)

Overview

Generic Connection Framework mendukung koneksi packet


(socket) dan stream (datagram). Sesuai dengan namanya, framework
ini menyediakan API dasar bagi koneksi di CLDC. Framework ini
menyediakan pondasi umum dari berbagai koneksi seperti HTTP,
socket, dan datagram. Walaupun Bluetooth dan serial I/O termasuk
kedalam API ini, GCF menyediakan satu set API yang lebih generic
dan mendasar yang menjadi abstraksi dari berbagai tipe koneksi.
Harus dicatat, bahwa tidak semua tipe koneksi dibutuhkan bagi
implementasi sebuah MIDP device.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Penerapkan sebuah MIDlet yang mempunyai kemampuan untuk
koneksi kedalam jaringan.
2. Mendeskripsikan Generic Connection Framework, dan
bagaimana ia dapat digunakan untuk mendukung method
3. Menciptakan MIDlet dengan menggunakan TCP sockets dan
UDP datagram

192 Networking (Socket/TCP


Politeknik Telkom Mobile Application

10.1 Generic Connection Framework

10.1.1 Hirarki dari GCF Interface


Perluasan dari hirarki GCF interface memungkinkan terjadinya
generalization. Sebuah tipe koneksi yang baru mungkin dapat
ditambahkan kepada framework ini dengan cara memperluas hirarki.

Gambar 10.1: Hirarki dari GCF Interface

Networking (Socket/TCP) 193


Politeknik Telkom Mobile Application

10.1.2 GCF Connection URL

Parameter-parameter koneksi telah dispesifikasikan dengan


menggunakan sebuah format pengalamatan:

scheme://username:password@host:port/path;parameters

1. Scheme adalah sebuah protokol atau method koneksi. Misalnya:


http,ftp, https.
2. Usernamebersifat optional, akan tetapi bila kita ingin
mendefinisikannya, harus didahului dengan tanda @
3. Password juga bersifat optional dan hanya dapat dispesifikasikan
jika username telah didefinisikan sebelumnya. Jika password
didefinisikan, maka ia harus dipisahkan dari username dengan
menggunakan tanda titik dua (:)
4. Host – parameter ini wajib dicantumkan. Bisa berupa nama host
atau fully qualified domain name (FQDN) atau alamat IP dari host
yang dituju.
5. Port – parameter ini juga bersifat optional. Jika tidak
dispesifikasikan, maka default port akan digunakan
6. Path
7. parameters – bersifat optional, tetapi harus didahuli dengan titik
koma (;) apabila ia dicantumkan

Jika kita menggunakan kurung siku untuk memberi tanda pada


parameter-parameter yang bersifat optional pada format pengalamatan
diatas, kita dapat mengubah format diatas menjadi seperti berikut:

scheme://[username[:password]@]host[:port]/path[;parameters]

Format pengalamatan tersebut haruslah sesuai dengan Uniform


Resource Indicator (URI) seperti yang didefinisikan pada RFC 2396.
Pada MIDP 2.0, hanya skema “http” dan “https” dibutuhkan untuk
diimplementasikan pada device.

194 Networking (Socket/TCP


Politeknik Telkom Mobile Application

10.2 TCP Sockets

Banyak implementasi dari HTTP dijalankan diatas layer TCP. Jika Anda
mengirim data menggunakan layer TCP, data tersebut akan dipotong
menjadi bagian yang lebih kecil yang disebut dengan packet. Layer
TCK akan memastikan bahwa semua packet akan dikirim oleh sender
dan diterima oleh recipient, dengan susunan yang sama seperti pada
saat ia dikirimkan. Jika sebuah packet tidak diterima oleh recipient, ia
akan mengirimkannya kembali. Hal ini berarti, sekali Anda mengirim
sebuah pesan, Anda dapat memastikan bahwa pesan tersebut akan
berhasil dikirim kepada recipient dengan format yang sama seperti
pada saat Anda mengirimkannya, tanpa ada data yang hilang atau
disisipi (dihalangi oleh sebuah siklus tertentu seperti recipient
disconnect dari jaringan) .

Layer TCP menangani reassembly dan retransmission pada packet


secara transparan. Sebagai contoh, pada protokol HTTP kita tidak
perlu khawatir terhadir prosess disassembly dan assembly packet
karena hal ini akan dihandle pada layer TCP.

Kadang-kadang, ukuran dari pesan tersebut terkadang terlalu kecil dan


sangat tidak efisien untuk dikirimkan sebagai packet tunggal (overhead
dari packet sangat tinggi jika dibandingkan dengan payload). Bayangkan
banyak packet dikirimkan melalui jaringan dengan satu byte payload
dan multi byte overhead(misal 16 bytes). Hal ini akan menyebabkan
jaringan sangat tidak effisien, banyak packets membanjiri jaringan
dengan hanya satu byte payload.

Pada kasus ini, implementasi dari TCP dimungkinkan untuk menunggu


sebuah pesan dikirim dengan sukses. Pesan tersebut kemudian akan
dipaket sebagai banyak pesan didalam sebuah packet sebelum
dikirimkan. Jika hal ini terjadi, maka akan terjadi keterlambatan pada
koneksi. Jika aplikasi Anda menginginkan sesedikit mungkin terjadi
keterlambatan, anda harus mengeset DELAY socket option ke nol (0).
Atau jika aplikasi Anda dapat tetap berjalan dengan beberapa paket
yang hilang atau tidak tersusun secara benar, Anda mungkin harus
mencoba menggunakan UDP atau koneksi datagram. Koneksi UDP
juga menggunakan sesedikit mungkin overhead packet.

Networking (Socket/TCP) 195


Politeknik Telkom Mobile Application

10.3 Server Sockets

Didalam model client-server, server akan secara terus menerus


menunggu sebuah koneksi dari client atau dari port tertentu yang telah
disetujui. Kita juga dapat menggunakan method Connector.open untuk
menciptakan sebuah server socket. Sebuah URL akan memberikan
sebuah format yang sama seperti pada TCP socket kepada method
open(), dengan nama hostname yang dibiarkan kosong (misal
socket://:8899).

196 Networking (Socket/TCP


Politeknik Telkom Mobile Application

10.4 Datagrams

Koneksi dari TCP socket adalah koneksi yang dapat dipercaya.


Sebaliknya, tersampaikannya pesan dengan menggunakan packet UDP
tidak dijamin. Tidak ada jaminan bahwa packet yang dikirimkan dengan
menggunakan paket datagram akan diterima oleh pasangan. Susunan
dari packet yang diterima juga tidak terpercaya. Susunan packet yang
dikirimkan dimungkinkan untuk tidak sama dengan susunan packet
yang diterima.

UDP datagrams atau packet digunakan apabila aplikasi dapat tetap


berjalan walaupun ada packet yang hilang atau packet tersebut tidak
lagi memiliki susunan yang sama seperti yang dikirimkan.

Networking (Socket/TCP) 197


Politeknik Telkom Mobile Application

198 Networking (Socket/TCP


Politeknik Telkom Mobile Application

Rangkuman

1. Generic Connection Framework mendukung koneksi packet


(socket) dan stream (datagram). Sesuai dengan namanya, framework
ini menyediakan API dasar bagi koneksi di CLDC. Framework ini
menyediakan pondasi umum dari berbagai koneksi seperti HTTP,
socket, dan datagram.
2. Walaupun Bluetooth dan serial I/O termasuk kedalam API ini, GCF
menyediakan satu set API yang lebih generic dan mendasar yang
menjadi abstraksi dari berbagai tipe koneksi. Harus dicatat, bahwa
tidak semua tipe koneksi dibutuhkan bagi implementasi sebuah MIDP
device.
3. Perluasan dari hirarki GCF interface memungkinkan terjadinya
generalization. Sebuah tipe koneksi yang baru mungkin dapat
ditambahkan kepada framework ini dengan cara memperluas hirarki.
4. Parameter-parameter koneksi telah dispesifikasikan dengan
menggunakan sebuah format pengalamatan:
scheme://username:password@host:port/path;parameters
1. Scheme adalah sebuah protokol atau method koneksi.
Misalnya: http,ftp, https.
2. Usernamebersifat optional, akan tetapi bila kita ingin
mendefinisikannya, harus didahului dengan tanda @
3. Password juga bersifat optional dan hanya dapat
dispesifikasikan jika username telah didefinisikan
sebelumnya. Jika password didefinisikan, maka ia harus
dipisahkan dari username dengan menggunakan tanda titik
dua (:)
4. Host – parameter ini wajib dicantumkan. Bisa berupa nama
host atau fully qualified domain name (FQDN) atau alamat
IP dari host yang dituju.
5. Port – parameter ini juga bersifat optional. Jika tidak
dispesifikasikan, maka default port akan digunakan
6. Path
7. parameters – bersifat optional, tetapi harus didahuli dengan
titik koma (;) apabila ia dicantumkan

Networking (Socket/TCP) 199


Politeknik Telkom Mobile Application

5. Banyak implementasi dari HTTP dijalankan diatas layer TCP. Jika


Anda mengirim data menggunakan layer TCP, data tersebut akan
dipotong menjadi bagian yang lebih kecil yang disebut dengan packet.
Layer TCK akan memastikan bahwa semua packet akan dikirim oleh
sender dan diterima oleh recipient, dengan susunan yang sama
seperti pada saat ia dikirimkan. Jika sebuah packet tidak diterima
oleh recipient, ia akan mengirimkannya kembali. Hal ini berarti, sekali
Anda mengirim sebuah pesan, Anda dapat memastikan bahwa pesan
tersebut akan berhasil dikirim kepada recipient dengan format yang
sama seperti pada saat Anda mengirimkannya, tanpa ada data yang
hilang atau disisipi (dihalangi oleh sebuah siklus tertentu seperti
recipient disconnectdari jaringan) .
6. Layer TCP menangani reassembly dan retransmission pada packet
secara transparan. Sebagai contoh, pada protokol HTTP kita tidak
perlu khawatir terhadir prosess disassembly dan assembly packet
karena hal ini akan dihandle pada layer TCP.
7. Didalam model client-server, server akan secara terus menerus
menunggu sebuah koneksi dari client atau dari port tertentu yang
telah disetujui. Kita juga dapat menggunakan method
Connector.open untuk menciptakan sebuah server socket. Sebuah
URL akan memberikan sebuah format yang sama seperti pada TCP
socket kepada method open(), dengan nama hostname yang
dibiarkan kosong (misal socket://:8899).
8. Koneksi dari TCP socket adalah koneksi yang dapat dipercaya.
Sebaliknya, tersampaikannya pesan dengan menggunakan packet
UDP tidak dijamin. Tidak ada jaminan bahwa packet yang dikirimkan
dengan menggunakan paket datagram akan diterima oleh pasangan.
Susunan dari packet yang diterima juga tidak terpercaya. Susunan
packet yang dikirimkan dimungkinkan untuk tidak sama dengan
susunan packet yang diterima.
9. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap
berjalan walaupun ada packet yang hilang atau packet tersebut tidak
lagi memiliki susunan yang sama seperti yang dikirimkan.

200 Networking (Socket/TCP


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Layer TCP menangani reassembly dan retransmission pada packet


secara transparan.
2. Protokol HTTP kita tidak perlu khawatir terhadir prosess
disassembly dan assembly packet karena hal ini akan dihandle pada
layer TCP.
3. Ukuran dari pesan tersebut terkadang terlalu kecil dan sangat tidak
efisien untuk dikirimkan sebagai packet tunggal (overhead dari
packet sangat tinggi jika dibandingkan dengan payload).
4. Jika aplikasi Anda menginginkan sesedikit mungkin terjadi
keterlambatan, anda harus mengeset DELAY socket option ke nol
(0).
5. Kita juga dapat menggunakan method Connector.open untuk
menciptakan sebuah server socket.
6. Sebuah URL akan memberikan sebuah format yang sama seperti
pada TCP socket kepada method open(), dengan nama hostname
yang dibiarkan kosong (misal socket://:8899).
7. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap
berjalan walaupun ada packet yang hilang atau packet tersebut tidak
lagi memiliki susunan yang sama seperti yang dikirimkan.

Networking (Socket/TCP) 201


Politeknik Telkom Mobile Application

Pilihan Ganda

5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Layer TCP menangani reassembly dan retransmission pada
packet secara transparan.
B. Protokol HTTP kita tidak perlu khawatir terhadir prosess
disassembly dan assembly packet karena hal ini akan dihandle
pada layer TCP.

cc. Pernyataan A dan B benar


dd. Pernyataan A benar dan pernyataan B salah
ee. Pernyataan A salah dan Pernyataan B benar
ff. Pernyataan A dan B salah

6. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Sebuah URL akan memberikan sebuah format yang sama seperti
pada TCP socket kepada method open(), dengan nama
hostname yang dibiarkan kosong (misal socket://:8899).
B. UDP datagrams atau packet digunakan apabila aplikasi dapat
tetap berjalan walaupun ada packet yang hilang atau packet
tersebut tidak lagi memiliki susunan yang sama seperti yang
dikirimkan.

y. Pernyataan A dan B benar


z. Pernyataan A benar dan pernyataan B salah
aa. Pernyataan A salah dan Pernyataan B benar
bb. Pernyataan A dan B salah

202 Networking (Socket/TCP


Politeknik Telkom Mobile Application

7. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Ukuran dari pesan tersebut terkadang terlalu kecil dan sangat
tidak efisien untuk dikirimkan sebagai packet tunggal (overhead
dari packet sangat tinggi jika dibandingkan dengan payload).
B. Bayangkan banyak packet dikirimkan melalui jaringan dengan
satu byte payload dan multi byte overhead(misal 16 bytes). Hal
ini akan menyebabkan jaringan sangat tidak effisien, banyak
packets membanjiri jaringan dengan hanya satu byte payload.

a. Pernyataan A dan B benar


b. Pernyataan A benar dan pernyataan B salah
c. Pernyataan A salah dan Pernyataan B benar
d. Pernyataan A dan B salah

8. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Susunan packet yang dikirimkan dimungkinkan untuk tidak sama
dengan susunan packet yang diterima.
B. UDP datagrams atau packet digunakan apabila aplikasi dapat
tetap berjalan walaupun ada packet yang hilang atau packet
tersebut tidak lagi memiliki susunan yang sama seperti yang
dikirimkan.

a. Pernyataan A dan B benar


b. Pernyataan A benar dan pernyataan B salah
c. Pernyataan A salah dan Pernyataan B benar
d. Pernyataan A dan B salah

Networking (Socket/TCP) 203


Politeknik Telkom Mobile Application

Latihan

Mendapatkan URL
Buatlah sebuah MIDlet yang mendapatkan HTTP URL. Aplikasi
tersebut akan mendapatkan URL dengan method GET dan
menampilkan jenis koneksi/ content properties (jika tersedia):
Reponse Code, Response Message, Length, Type, Encoding, Expiration
dan Last Modified Date.

204 Networking (Socket/TCP


Politeknik Telkom Mobile Application

Networking (Socket/TCP) 205


Politeknik Telkom Mobile Application

11 Networking (HTTP)

Overview

Dua buah tipe request HTTP yang paling umum digunakan adalah GET dan
POST yang juga dikenal sebagai request method. Request GET digunakan untuk
mendapatkan atau menerima informasi dari server. Pada umumnya request
GET digunakan untuk menerima file HTML atau image.
Sedangkan request POST digunakan untuk mengirimkan data ke server. Request
POST akan mengirimkan informasi server dalam bentuk HTML yang berisi
data yang dimasukkan oleh client.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Membuat koneksi HTTP/HTTPS

206 Networking (HTTP)


Politeknik Telkom Mobile Application

11.1 Koneksi HTTP

11.1.1 Protokol HTTP

HTTP merupakan kepanjangan dari HyperText Transfer Protocol. Ia


merupakan protocol yang digunakan untuk memindahkan web pages
dari web server (misal: www.sun.com) kepada web browser.
Client(web browser) akan me-request sebuah web page dengan cara
mespesifikasikan path dengan command Get atau POST. Pada method
GET, parameter telah dispesifikasikan dan dilekatkan pada URL.
Sebagai contoh, untuk memberikan sebuah variable dengan nama “id”
dan memiliki nilai 100 kepada index.jsp, url tersebut akan
dispesifikasikan sebagai : “http://hostname/index.jsp?id=100”.
Parameter tambahan dipisahkan dengan dengan tanda &,
"http://hostname/index.jsp?id=100&page=2.

Jika method “POST” digunakan, parameter bukanlah menjadi bagian


dari URL tetapi dikirim dengan pada baris terpisah pada command
POST.

Client / Web Browser HTTP Server


GET /index.jsp?id=100
HTTP/1.1
HTTP/1.1 200 OK Server: Apache-
Coyote/1.1 Content-Type:
text/html;charset=ISO-8859-1 Date: Wed, 18
Jun 2005 14:09:31 GMT Connection: close
<html> <head> <title>Test Page</title>
</head> <body> <h1 align="center">Test
Page</h1> </body> </html>

Gambar 11.1: Contoh dari transaksi HTTP GET

Networking (HTTP) 207


Politeknik Telkom Mobile Application

Client / Web Browser HTTP Server


GET /non-existent.html
HTTP/1.0
HTTP/1.1 404 /non-existent.html
Server: Apache-Coyote/1.1 Content-
Type: text/html;charset=utf-8
Content-Length: 983 Date: Mon, 11 Jul
2005 13:21:01 GMT Connection: close
<html><head><title>Apache
Tomcat/5.5.7 -Error
report</title><style>...
<body><h1>HTTP Status 404</h1> ...
The requested resource (non-
existent.html)is not available. ...
</body></html>

Gambar 11.2: Contoh dari transaksi HTTP GET dengan response error

11.1.2 Menciptakan sebuah koneksi HTTP

Anda dapat membuka sebuah koneksi HTTP dengan menggunakan


Connector.open() dan meng-casting nya dengan salah satu dari ketiga
interface berikut ini: StreamConnection, ContentConnection, dah
HTTPConnection. Bagaimanapun, dengan StreamConnection dan
ContentConnection, Anda tidak dapat menspesifikasikan dan
menurunkan parameter-parameter spesifik dari HTTP dan juga result-
nya.

Bila Anda menggunakan StreamConnection, panjang dari sebuah reply,


tidak dapat ditentukan sebelumnya. Sedangkan pada
ContentConnection atau HTTPConnection, selalu ada cara untuk
menentukan panjang dari sebuah reply. Akan tetapi penentuan panjang
ini, tidak selalu tersedia. Oleh karena itu, program Anda harus bisa
mendapatkan reply tersebut tanpa harus mengetahui panjang content
terlebih dahulu.

208 Networking (HTTP)


Politeknik Telkom Mobile Application

11.1.3 Handling HTTP Redirects

Terkadang server akan melakukan redirect dari sebuah browser/client


ke web page yang lain dengan cara me-reply HTTP_MOVED_PERM
(301), HTTP_MOVED_TEMP (302), HTTP_SEE_OTHER (303) atau
HTTP_TEMP_REDIRECT (307) daripada menggunakan reply
HTTP_OK yang biasa dilakukan. Program Anda harus dapat

Networking (HTTP) 209


Politeknik Telkom Mobile Application

mengidentifikasi-nya dengan menggunakan getResponseCose(),


mendapatkan URI yang baru dari header dengan menggunakan
getHeaderField(“Location”), dan mendapatkan kembali dokumen dari
lokasi yang baru.

int code = connection.getResponseCode();

switch(code){

case HttpConnection.HTTP_MOVED_PERM:

case HttpConnection.HTTP_MOVED_TEMP:

case HttpConnection.HTTP_SEE_OTHER:

case HttpConnection.HTTP_TEMP_REDIRECT:

String newUrl =
conn.getHeaderField("Location");
...

11.2 Koneksi HTTPS

HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport.


Membuka sebuah koneksi HTTPS, hampir sama untuk membuka
koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan
kepada Connector.open() dan meng-casting hasilnya kepada
HttpsConnection class variable.

Sebuah tipe exception tambahan juga harus dijalankan melalui


Connector.open() misalnya IllegalArgumentException,
ConnectionNotFoundException,java.io.IOException dan
SecurityException. Sebuah CertificateExceptionjuga dapat dijalankan
untuk melaporkan kesalahan pada certificate.

210 Networking (HTTP)


Politeknik Telkom Mobile Application

static byte BAD_EXTENSIONS Mengindikasikan bahwa sertifikat


memiliki extenstion yang tidak teridentifikasi.

static byte BROKEN_CHAIN Mengindikasikan bahwa sertifikat


terletak didalam sebuah rantai yang tidak terautentikasi pada
mata rantai berikutnya.
static byte CERTIFICATE_CHAIN_TOO_LONG Mengindikasikan
bahwa sertifikat server dari rantai tersebut melebihi panjang
yang disepakati pada policy dari pembuat sertifikat.
static byte EXPIRED Mengindikasikan bahwa sertifikat tersebut telah
berakhir jangka waktunya.

static byte INAPPROPRIATE_KEY_USAGE Mengindikasikan bahwa


public key dari sertifikat tersebut telah digunakan tidak
sesuai dengan ketetapan yang dibuat oleh pembuat sertifikat.

Networking (HTTP) 211


Politeknik Telkom Mobile Application

static byte MISSING_SIGNATURE Mengindikasikan bahwa object dari


sertifikat tidak memiliki sebuah tanda tangan digital.

static byte NOT_YET_VALID Mengindikasikan bahwa sertifikat


tersebut tidak berlaku.
static byte ROOT_CA_EXPIRED Mengindikasikan bahwa root dari
public key CA telah habis jangka waktunya.

static byte SITENAME_MISMATCH Indicates a certificate does not


contain the correct site name.
static byte UNAUTHORIZED_INTERMEDIATE_CA Mengindikasikan
bahwa ada sebuah sertifikat intermediate certificate didalam
rantai yang tidak punya otoritas sebagai intermediate CA.

static byte UNRECOGNIZED_ISSUER Mengindikasikan bahwa


sertifikat tersebut telah dikeluarkan oleh entity yang tidak
teridentifikasi.
static byte UNSUPPORTED_PUBLIC_KEY_TYPE Mengindikasikan
bahwa tipe public key didalam sertifikat tidak didukung oleh
device.
static byte UNSUPPORTED_SIGALG Mengindikasikan bahwa sertifikat
telah ditandatangani dengan menggunakan algorithma yang
tidak disupport.
static byte VERIFICATION_FAILED Mengindikasikan bahwa sertifikat
tersebut gagal di-verifikasi.

Gambar 11.3: Berbagai alasan pada CertificateException (kutipan dari


spesifikasi MIDP 2.0 – JSR 118)

212 Networking (HTTP)


Politeknik Telkom Mobile Application

11.3 Servlet

Tujuan servlet adalah untuk meng-generate respons yang bersifat


dinamis.
Cara komunikasi antara client dan server melalui protocol HTTP
adalah sebagai berikut :
1. Client akan mengirimkan HTTP request ke server
2. Setelah request diterima oleh server, server akan
memberikannya pada servlet untuk dilakukan pemrosesan,
misalnya akses ke database
3. Setelah pemrosesan selesai dilakukan, server akan
mengembalikan hasilnya ke client. Hasil pengembalian ini dapat
berbentuk file HTML yang akan ditampilkan di browser, image
dan data binary.

Gambar 11.4 Cara Kerja Servlet

11.4 HTTP Servlet

Dua buah tipe request HTTP yang paling umum digunakan adalah GET
dan POST yang juga dikenal sebagai request method. Request GET
digunakan untuk mendapatkan atau menerima informasi dari server.
Pada umumnya request GET digunakan untuk menerima file HTML atau
image.

Networking (HTTP) 213


Politeknik Telkom Mobile Application

Sedangkan request POST digunakan untuk mengirimkan data ke server.


Request POST akan mengirimkan informasi server dalam bentuk HTML
yang berisi data yang dimasukkan oleh client.

214 Networking (HTTP)


Politeknik Telkom Mobile Application

Rangkuman

1. HTTP merupakan kepanjangan dari HyperText Transfer Protocol. Ia


merupakan protocol yang digunakan untuk memindahkan web pages
dari web server (misal: www.sun.com) kepada web browser.
Client(web browser) akan me-request sebuah web page dengan cara
mespesifikasikan path dengan command Get atau POST. Pada
method GET, parameter telah dispesifikasikan dan dilekatkan pada
URL. Sebagai contoh, untuk memberikan sebuah variable dengan
nama “id” dan memiliki nilai 100 kepada index.jsp, url tersebut akan
dispesifikasikan sebagai : “http://hostname/index.jsp?id=100”.
Parameter tambahan dipisahkan dengan dengan tanda &,
"http://hostname/index.jsp?id=100&page=2.
2. Anda dapat membuka sebuah koneksi HTTP dengan menggunakan
Connector.open() dan meng-casting nya dengan salah satu dari
ketiga interface berikut ini: StreamConnection, ContentConnection,
dah HTTPConnection. Bagaimanapun, dengan StreamConnection
dan ContentConnection, Anda tidak dapat menspesifikasikan dan
menurunkan parameter-parameter spesifik dari HTTP dan juga
result-nya.
3. Bila Anda menggunakan StreamConnection, panjang dari sebuah
reply, tidak dapat ditentukan sebelumnya. Sedangkan pada
ContentConnection atau HTTPConnection, selalu ada cara untuk
menentukan panjang dari sebuah reply. Akan tetapi penentuan
panjang ini, tidak selalu tersedia. Oleh karena itu, program Anda
harus bisa mendapatkan reply tersebut tanpa harus mengetahui
panjang content terlebih dahulu.
4. Terkadang server akan melakukan redirect dari sebuah
browser/client ke web page yang lain dengan cara me-reply
HTTP_MOVED_PERM (301), HTTP_MOVED_TEMP (302),
HTTP_SEE_OTHER (303) atau HTTP_TEMP_REDIRECT (307)
daripada menggunakan reply HTTP_OK yang biasa dilakukan.
Program Anda harus dapat mengidentifikasi-nya dengan
menggunakan getResponseCose(), mendapatkan URI yang baru dari
header dengan menggunakan getHeaderField(“Location”), dan

Networking (HTTP) 215


Politeknik Telkom Mobile Application

mendapatkan kembali dokumen dari lokasi yang baru.


5. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport.
Membuka sebuah koneksi HTTPS, hampir sama untuk membuka
koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan
kepada Connector.open() dan meng-casting hasilnya kepada
HttpsConnection class variable.
6. Sebuah tipe exception tambahan juga harus dijalankan melalui
Connector.open() misalnya IllegalArgumentException,
ConnectionNotFoundException,java.io.IOException dan
SecurityException. Sebuah CertificateExceptionjuga dapat dijalankan
untuk melaporkan kesalahan pada certificate.
7. Cara komunikasi antara client dan server melalui protocol HTTP
adalah sebagai berikut :
1. Client akan mengirimkan HTTP request ke server
2. Setelah request diterima oleh server, server akan
memberikannya pada servlet untuk dilakukan pemrosesan,
misalnya akses ke database
3. Setelah pemrosesan selesai dilakukan, server akan
mengembalikan hasilnya ke client. Hasil pengembalian ini dapat
berbentuk file HTML yang akan ditampilkan di browser, image
dan data binary.
8. Dua buah tipe request HTTP yang paling umum digunakan adalah GET
dan POST yang juga dikenal sebagai request method.

216 Networking (HTTP)


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. HTTP merupakan kepanjangan dari HyperText Transfer Protocol.


Ia merupakan protocol yang digunakan untuk memindahkan web
pages dari web server (misal: www.sun.com) kepada web browser.
2. Client(web browser) akan me-request sebuah web page dengan cara
mespesifikasikan path dengan command Get atau POST. Pada
method GET, parameter telah dispesifikasikan dan dilekatkan pada
URL.
3. Jika method “POST” digunakan, parameter bukanlah menjadi bagian
dari URL tetapi dikirim dengan pada baris terpisah pada command
POST.
4. Anda dapat membuka sebuah koneksi HTTP dengan menggunakan
Connector.open() dan meng-casting nya dengan salah satu dari
ketiga interface berikut ini: StreamConnection, ContentConnection,
dah HTTPConnection.
5. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport.
6. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka
koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan
kepada Connector.open() dan meng-casting hasilnya kepada
HttpsConnection class variable.
7. Dua buah tipe request HTTP yang paling umum digunakan adalah GET
dan POST yang juga dikenal sebagai request method.

Networking (HTTP) 217


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Request GET digunakan untuk mendapatkan atau menerima
informasi dari server. Pada umumnya request GET digunakan
untuk menerima file HTML atau image.
B. Sedangkan request POST digunakan untuk mengirimkan data ke
server. Request POST akan mengirimkan informasi server dalam
bentuk HTML yang berisi data yang dimasukkan oleh client.

gg. Pernyataan A dan B benar


hh. Pernyataan A benar dan pernyataan B salah
ii. Pernyataan A salah dan Pernyataan B benar
jj. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Anda dapat membuka sebuah koneksi HTTP dengan
menggunakan Connector.open() dan meng-casting nya dengan
salah satu dari ketiga interface berikut ini: StreamConnection,
ContentConnection, dah HTTPConnection.
B. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka
koneksi HTTP. Perbedaan utamanya adalah URL akan
memberikan kepada Connector.open() dan meng-casting
hasilnya kepada HttpsConnection class variable.

cc. Pernyataan A dan B benar


dd. Pernyataan A benar dan pernyataan B salah
ee. Pernyataan A salah dan Pernyataan B benar
ff. Pernyataan A dan B salah

218 Networking (HTTP)


Politeknik Telkom Mobile Application

3. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Client(web browser) akan me-request sebuah web page dengan
cara mespesifikasikan path dengan command Get atau POST.
Pada method GET, parameter telah dispesifikasikan dan
dilekatkan pada URL.
B. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure
transport.

a. Pernyataan A dan B benar


b. Pernyataan A benar dan pernyataan B salah
c. Pernyataan A salah dan Pernyataan B benar
d. Pernyataan A dan B salah

4. Cara komunikasi antara client dan server melalui protocol HTTP


adalah sebagai berikut :

1. Client akan mengirimkan HTTP request ke server


2. Setelah request diterima oleh server, server akan
memberikannya pada servlet untuk dilakukan pemrosesan,
misalnya akses ke database
3. Setelah pemrosesan selesai dilakukan, server akan
mengembalikan hasilnya ke client. Hasil pengembalian ini dapat
berbentuk file HTML yang akan ditampilkan di browser, image
dan data binary.

m. 1,2,3 c. 2,3
n. 1,2 d. 1,3

Networking (HTTP) 219


Politeknik Telkom Mobile Application

Latihan

1. Sebutkan langkah-langkah Cara komunikasi antara client dan server


melalui protocol HTTP?
2. Sebutkan perbedaan antara HTTP dengan HTTPS?

220 Networking (HTTP)


Politeknik Telkom Mobile Application

12 Persistent Storage

Overview

MIDP menyediakan sebuah API dimana program dapat menyimpan data-data


aplikasi secara lokal didalam device tersebut. MIDP Record Management
System adalah sebuah fasilitas yang dimiliki oleh MIDlets untuk menyimpan
data-data aplikasi pada saat MIDlet invocations. Data akan disimpan dalam
non-volatile memory didalam device. Hal ini berarti, data-data program yang
telah disimpan tidak akan hilang walaupun program di restart maupun device
dimatikan.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai :


1. Memahami mengenai konsep dari Record Store
2. Membuat dan membuka sebuah Record Store
3. Menambah, memanggil kembali, mengupdate, dan mendelete
record
4. Memanggil record satu persatu (enumerate) record dengan
menggunakan RecordEnumerate
5. Membuat sebuah Record Comparator
6. Membuat sebuah Record Filter

Persistent Storage 221


Politeknik Telkom Mobile Application

12.1 Record Store

Sebuah Record Store adalah sebuah koleksi daripada record-record.


Record Id didalam Record Store selalu unique. Record Id akan secara
otomatis dialokasikan pada saat pembentukan sebuah record dan
bertindak sebagai index atau primary key. Pemberian record Id
dilaksanakan secara sekuensial dan nilai yang diberikan kepada record
Id pertama pada setiap Record Store adalah 1 (satu).

Pada saat sebuah record dihapus, record id-nya tidak akan bisa
digunakan kembali. Jika kita membuat empat buah record dan
menghapus record ke-empat, maka record Id selanjutnya yang akan
diberikan oleh system adalah 5 (lihat gambar)

Record ID Byte array


1 Data dari record #1
2 Data dari record #2
3 Data dari record #3
5 Data dari record #5

MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari
sebuah record store didalam MIDlet suite haruslah unique. Nama dari
record store juga case sensitive dan memiliki panjang maksimal 32
karakter.
Pada saat MIDlet suite dihapus dari sebuah device, maka semua record
store yang terkoneksi dengan MIDlet didalam suite tersebut juga akan
terhapus.
Membuat dan membuka sebuah Record Store
Method-method dibawah ini digunakan untuk membuat dan membuka
sebuah record store:

222 Persistent Storage


Politeknik Telkom Mobile Application

static openRecordStore(String
RecordStore recordStoreName,boolean createIfNecessary)
static openRecordStore(String
RecordStore recordStoreName,boolean createIfNecessary,
int authmode,boolean writable)
static openRecordStore(String
RecordStore recordStoreName,String vendorName, String
suiteName)

Jika createIfNecessary di-set menjadi true dan Record Store belum


ada, maka Record Store akan dibangun. Jika createIfNecessary di-set
menjadi false dan Record Store tersebut belum dibuat, maka sebuah
RecordStoreNotFoundException akan dijalankan.

Authmode paramater dapat di-set menjadi


RecordStore.AUTHMODE_PRIVATE atau
RecordStore.AUTHMODE_ANY. Penggunaan UTHMODE_PRIVATE
akanmenyebabkan Record Store hanya mampu diakses oleh MIDlet
suite sipemilik MIDlet. Sedangkan setting authmode ke
AUTHMODE_ANY akanmenyebabkan Record Store untuk diakses
oleh MIDlet manapun. Access modeini dispesifikasikan oleh sebuah
writable boolean parameter. Untukmemperbolehkan MIDlet yang lain
(diluar MIDlet suite) untuk menggunakanrecord store tersebut,
parameter ini harus diubah menjadi true.

Penggunaan bentuk pertama dari method openRecordStore()akan


menyebabkanRecord Store untuk dapat diakses oleh MIDlet-MIDlet
didalam suite yangsama (authmode di-set ke AUTHMODE_PRIVATE).
Untuk membuka sebuah Record Store dari MIDlet suite yang
berbeda,bentuk ketiga dari method openRecordStore harus
digunakan. Anda harusmenspesifikasikan nama vendor (vendorName)
dan nama dari Midlet suite(suiteName).

Jika sebuah Record Store terlanjur dibuka, method ini


akanmengembalikan reference kepada record store tersebut. System
akan tetapmenghitung berapa kali Record Store telah dibuka dan
setiap RecordStore harus ditutup dengan jumlah yang sama pada saat
ia dibuka.

Persistent Storage 223


Politeknik Telkom Mobile Application

Menambahkan sebuah record

Method addRecord akan membuat record yang baru didalam Record


Store dan akan mengembalikan record ID.

Mengambil kembali Record

byte[] getRecord(int recordId)


int getRecord(int recordId, byte[] buffer, int offset)
int getRecordSize(int recordId)

Bentuk pertama dari method getRecord akan mengembalikan copy


dari data stored yang ada didalam record tertentu berdasarkan
RecordID. Bentuk kedua akan meng-copy data pada paramater byte
array yang telah disediakan. Pada saat menggunakan bentuk kedua,
byte array tersebut haruslah dialokasikan terlebih dahulu. Jika ukuran
dari record lebih besar daripada ukuran dari parameter, maka akan
terjadi ArrayIndexOutOfBoundsException. Anda akan menggunakan
method getRecordSize secara berurutan untuk mengetahui ukuran
dari record sebelum Anda mulai untuk membacanya.

Meng-update sebuah Record Anda tidak dapat memodifikasi hanya


sebagian dari data record. Jika Anda ingin untuk memodifikasi sebuah
record Anda harus:
1 Membaca tiap record dengan menggunakan getRecord
2 Meng-update record didalam memory
3 Memanggil setRecord untuk mengupdate data record

224 Persistent Storage


Politeknik Telkom Mobile Application

Menghapus Record

Pada saat sebuah record dihapus, record Id akan digunakan kembali di


pemanggilanberikutnya pada addRecord. Hal ini berarti, ada sebuah
celah didalam Record Id.Oleh karena itu, tidak disarankan untuk
menggunakan counter increment untuk membuat list dari keseluruhan
record didalam record store. Anda harus menggunakan Record
Enumerator untuk mengetahui tiap record didalam sebuah list store.

Menutup sebuah Record Store

Record store yang akan ditutup dengan cara pemanggilan method


closeRecordStore() tidak akan benar-benar ditutup sampai
closeRecordStore() dipanggil sejumlah pemanggilan dari
openRecordStore() sebelumnya. Pemanggilan closeRecordStore()
lebih dari jumlah pemanggilan openRecordStore() akan berakibat
exception RecordStoreNotOpen.

Potongan kode dari contoh RmsExample1 adalah MIDlet sederhana


yang mendemonstrasikan bagaimana untuk membuat sebuah record
store, menambah record, dan memanggil kembali semua record
didalam record store:

// Buka dan buatlah record store dengan nama “RmsExample1”


recStore= RecordStore.openRecordStore("RmsExample1",
true);

// Masukkan content kedalam record store


for(int recId=1; recId<=recStore.getNumRecords();
recId++){

// getRecord memiliki return value berupa panjang dari recordrecLength =


recStore.getRecord(recId, data, 0);
// Mengkonversikan byte array menjadi String
String item = new String(data, 0, recLength);
...

Persistent Storage 225


Politeknik Telkom Mobile Application

...
// Ini adalah String yang akan kita masukkan kedalam record
String newItem = "Record #" + recStore.getNextRecordID();

// Konversikan String ke byte array


byte[] bytes = newItem.getBytes();

// Tulislah record kedalam record store


recStore.addRecord(bytes, 0, bytes.length);

Tips Pemrograman:
1. Record ID dimulai dari 1, bukan 0. Oleh karena itu, apabila
menggunakan loop, ingatlah untuk menggunakan 1 sebagai index
pertama dan bukan 0.
2. Lebihbaik digunakan Record Enumerator daripada menggunakan
index incrementing (seperti contoh). Record yang telah dihapus, tetapi
masih tetap ingin dibaca pada contoh disini akan menyebabkan
InvalidRecordIDException.

Mendapatkan list dari Record Store didalam MIDlet Suite

Method ini akan mengembalikan array dari nama record store


tersebut yang dimiliki oleh MIDlet suite. Jika MIDlet suite tidak
memiliki sebuah Record Store, maka method ini akan memiliki nilai
pengembalian null.

String[] storeNames =
RecordStore.listRecordStores();
System.out.println("Record Stores for this MIDlet
suite:");

for (int i=0; storeNames != null &&


i<storeNames.length; i++){
System.out.println(storeNames[i]);
}

226 Persistent Storage


Politeknik Telkom Mobile Application

Contoh: RmsListStores

Record Stores for this MIDlet suite:


Prefs
RmsExample1
RmsExample2

Contoh output dari RmsListStores

Urutan penamaan yang akan dikembalikan tidak akan didefinisikan dan


akan diimplementasikan secara independent. Oleh karena itu, apabila
Anda ingin untuk menampilkan nama tersebut secara alphabetic, maka
Anda harus melakukan sorting array terlebih dahulu.

Menyimpan Data Primitif Java Sejauh ini, data yang telah dibuat dan
dibaca dari Record Store adalah berupa String. CLDC memiliki
standard classes dalam manipulasi data primitif. Class tersebut berasal
dari standard library platform Java 2, yaitu Standard Edition (J2SE).

Anda dapat menulis data Java primitif dengan mengkombinasikan class


ByteArrayOutputStream dan DataOutputStream. Pembacaan tipe data
primitive(int, long, short, string, Boolean, dan sebagainya) dapat pula
dilakukan dengan menggunakan ByteArrayInputStream dan
DataInputStream.

ByteArrayOutputStream out = new


ByteArrayOutputStream();
DataOutputStream dOut = new DataOutputStream(out);
// Menyimpan sebuah integer
dOut.writeInt(recStore.getNextRecordID() *
recStore.getNextRecordID());
// Menyimpan sebuah string
dOut.writeUTF("Record #" +
recStore.getNextRecordID());
byte[] bytes = out.toByteArray();
// Menuliskan Record pada Store
recStore.addRecord(bytes, 0, bytes.length);
...

Persistent Storage 227


Politeknik Telkom Mobile Application

// Menuju Record selanjutnya


byte[] recBytes = enumerator.nextRecord();
ByteArrayInputStream in = new
ByteArrayInputStream(recBytes);
DataInputStream dIn = new DataInputStream(in);
int count = dIn.readInt();
String item = dIn.readUTF();

Method lain untuk Record Stores


long getLastModified()
int getVersion()

Sistem merekam bilamana sebuah Record Store mengalami modifikasi


terakhir. Method getLastModified memberikan informasi bahwa
sebuah Record Store mengalami perubahan terakhir, dalam bentuk
long dan sesuai format yang digunakan oleh
system.currentTimeMillis().

Seluruh Record Store memiliki version information. Setiap kali sebuah


record mengalami modifikasi, maka version number juga akan
terupdate. Penggunaan method addRecord, setRecord dan
deleteRecord menyebabkan penambahan version number dari record
store tersebut.

static void deleteRecordStore(String


recordStoreName)Menghapus record store.

String getName()Mengetahui nama dari RecordStore.

int getNextRecordID()Mengetahui recordId dari


record selanjutnya untuk disimpan pada record
store.

int getNumRecords()Mendapatkan jumlah record yang


terdapat pada Record Store.

int getSize()Mengetahui space (dalam bytes) yang


dipakai oleh record store.

int getSizeAvailable()Mengetahui sisa space yang


tersedia (dalam bytes).

228 Persistent Storage


Politeknik Telkom Mobile Application

void setMode(int authmode, boolean writable)


Mengubah access mode dari RecordStore.

12.2 Record Enumeration

Memeriksa sebuah record store menggunakan incerementing index


adalah tidak efisien. Record stores yang telah dihapus akan terlewati
jika Record Id dari record tersebut tidak digunakan kembali.
Penggunaan record enumeration dapat menyelesaikan permasalahan
tersebut dengan melakukan pemeriksaaan pada record yang telah
dihapus. Anda juga dapat mengurutkan enumerasi dengan
menggunakan method pembanding. Dengan penggunaan method
pembanding, anda dapat melewati record yang tidak diharapkan pada
output.

RecordEnumeration enumerateRecords(RecordFilter
filter,
RecordComparator comparator, boolean keepUpdated)

Method enumerateRecords dari sebuah record store akan


menghasilkan enumerasi untuk memeriksa seluruh record pada sebuah
record store. Ini adalah cara yang direkomendasikan untuk
melewatkan seluruh record dalam record store. Filter dan
Comparator akan dibahas dalam pembahasan selanjutnya.
Cara paling sederhana dalam menggunakan method ini adalah
memberikan nilai null untuk filter dan comparator. Hal ini akan
menghasilkan enumerasi dari seluruh record pada sebuah store dalam
urutan acak.

// Membuka atau membuat sebuah record store dengan


nama "RmsExample2"
recStore = RecordStore.openRecordStore("RmsExample2",
true);

// Mengambil isi dari record store


RecordEnumeration enumerator

= recStore.enumerateRecords(null, null,

Persistent Storage 229


Politeknik Telkom Mobile Application

false);
while (enumerator.hasNextElement()){

// Mendapatkan record selanjutnya dan konversi byte


array menjadi string

String item = new String(enumerator.nextRecord());

// Area kode manipulasi record

...
}

12.3 Record Comparator

Pengurutan sebuah enumerasi dapat didefinisikan menggunakan sebuah


Record Comparator. Record Comparator digunakan pada method
enumerateRecords. Jika anda ingin mengurutkan output dari
enumerasi, anda harus membuat comparator dan
mengimplementasikannya sebagai parameter kedua pada
enumerateRecords.

int compare(byte[] rec1, byte[] rec2)

Untuk membuat sebuah record comparator, anda harus


mengimplementasikan interface RecordComparator. Interface
tersebut mendefinisikan method tunggal, compare(byte[] rec1, byte[]
rec2). Method ini harus menghasilkan return value,
RecordComparator.FOLLOWS atau RecordComparator.PRECEDES.
RecordComparator.EQUIVALENT harus dihasilkan jika rec1 adalah
ekuivalen terhadap rec2 dalam pengurutan.

// Membuat enumerasi, diurutkan menurut alfabet

RecordEnumeration enumerator
=
recStore.enumerateRecords(null
, new AlphaOrder(), false);
...

230 Persistent Storage


Politeknik Telkom Mobile Application

// Pengurutan
menurut alfabet
class AlphaOrder
implements
RecordComparator
{

public int compare(byte[] rec1, byte[] rec2){


String record1 = new String(rec1).toUpperCase();
String record2 = new String(rec2).toUpperCase();
if (record1.compareTo(record2) < 0){

return(PRECEDES);
} else {
if (record1.compareTo(record2) > 0){
return(FOLLOWS);
} else {
return(EQUIVALENT);
}
}
}
}

12.4 Record Filter

Contoh – contoh selama ini membaca seluruh record dari sebuah


store. Kita dapat menggunakan sebuah filter untuk mendapatkan hanya
record yang kita inginkan.

Program Anda harus mengimpelementasikan method match() untuk


menyeleksi record. Method tersebut akan menghasilkan nilai true jika
record sesuai dengan criteria.

boolean matches(byte[] candidate)

public boolean matches(byte[] candidate){


boolean isaMatch = false;
try {

Persistent Storage 231


Politeknik Telkom Mobile Application

ByteArrayInputStream bin = new


ByteArrayInputStream(candidate);
DataInputStream dIn = new DataInputStream(bin);

int count = dIn.readInt();

String item = dIn.readUTF();

// mendapatkan record dengan akhiran “0”

if (item.endsWith("0")){isaMatch = true;

} else {

isaMatch = false;

} catch (Exception e){items.append(e.toString(),


null); }

return(isaMatch);
}

12.5 Record Listener


Sebuah Record Store dapat menggunakan lebih dari satu record
listener. Record listener adalah object yang dipanggil pada saat sebuah
record ditambahkan, diubah atau dihapus dari record store. Record
listeners harus mengimplementasikan interface RecordListener.
Record Listener diregristrasikan pada record store menggunakan
method addRecordListener(). Pada saat sebuah record store ditutup,
seluruh record listener yang terkait juga akan dihapus.
Penggunaan method deleteRecordStore() tidak akan menghasilkan
pemanggilan recordDeleted() pada record listener manapun yang
terkait.

232 Persistent Storage


Politeknik Telkom Mobile Application

void recordAdded(RecordStore recordStore, int recordId)Dipanggil


saat sebuah record ditambahkan pada record store.
void recordChanged(RecordStore recordStore, int recordId)Dipanggil
setelah sebuah record pada record store diubah.
void recordDeleted(RecordStore recordStore, int recordId)Dipanggil
setelah sebuah record dihapus dari record store.

Persistent Storage 233


Politeknik Telkom Mobile Application

Rangkuman

1. Sebuah Record Store adalah sebuah koleksi daripada record-record.


Record Id didalam Record Store selalu unique. Record Id akan
secara otomatis dialokasikan pada saat pembentukan sebuah record
dan bertindak sebagai index atau primary key. Pemberian record Id
dilaksanakan secara sekuensial dan nilai yang diberikan kepada
record Id pertama pada setiap Record Store adalah 1 (satu).
2. Pada saat sebuah record dihapus, record id-nya tidak akan bisa
digunakan kembali. Jika kita membuat empat buah record dan
menghapus record ke-empat, maka record Id selanjutnya yang akan
diberikan oleh system adalah 5
3. MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari
sebuah record store didalam MIDlet suite haruslah unique. Nama
dari record store juga case sensitive dan memiliki panjang maksimal
32 karakter.
4. Pada saat MIDlet suite dihapus dari sebuah device, maka semua
record store yang terkoneksi dengan MIDlet didalam suite tersebut
juga akan terhapus.
5. Memeriksa sebuah record store menggunakan incerementing index
adalah tidak efisien. Record stores yang telah dihapus akan terlewati
jika Record Id dari record tersebut tidak digunakan kembali.
6. Pengurutan sebuah enumerasi dapat didefinisikan menggunakan
sebuah Record Comparator. Record Comparator digunakan pada
method enumerateRecords. Jika anda ingin mengurutkan output dari
enumerasi, anda harus membuat comparator dan
mengimplementasikannya sebagai parameter kedua pada
enumerateRecords.
7. Sebuah Record Store dapat menggunakan lebih dari satu record
listener. Record listener adalah object yang dipanggil pada saat
sebuah record ditambahkan, diubah atau dihapus dari record store.
Record listeners harus mengimplementasikan interface
RecordListener.

234 Persistent Storage


Politeknik Telkom Mobile Application

Kuis Benar Salah

1. Sebuah Record Store adalah sebuah koleksi daripada record-record.


2. Record Id didalam Record Store selalu unique. Record Id akan
secara otomatis dialokasikan pada saat pembentukan sebuah record
dan bertindak sebagai index atau primary key.
3. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang
diberikan kepada record Id pertama pada setiap Record Store adalah
1 (satu).
4. Pada saat sebuah record dihapus, record id-nya tidak akan bisa
digunakan kembali. Jika kita membuat empat buah record dan
menghapus record ke-empat, maka record Id selanjutnya yang akan
diberikan oleh system adalah 5 (lihat gambar)
5. MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari
sebuah record store didalam MIDlet suite haruslah unique. Nama
dari record store juga case sensitive dan memiliki panjang maksimal
32 karakter.

Persistent Storage 235


Politeknik Telkom Mobile Application

Pilihan Ganda

1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Sebuah Record Store adalah sebuah koleksi daripada record-record.
B. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang
diberikan kepada record Id pertama pada setiap Record Store adalah
1 (satu).

C. Pernyataan A dan B benar


D. Pernyataan A benar dan pernyataan B salah
E. Pernyataan A salah dan Pernyataan B benar
F. Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Record Id didalam Record Store selalu unique. Record Id akan
secara otomatis dialokasikan pada saat pembentukan sebuah record
dan bertindak sebagai index atau primary key.
B. Pada saat sebuah record dihapus, record id-nya tidak akan bisa
digunakan kembali. Jika kita membuat empat buah record dan
menghapus record ke-empat, maka record Id selanjutnya yang akan
diberikan oleh system adalah 5.

C. Pernyataan A dan B benar


D. Pernyataan A benar dan pernyataan B salah
E. Pernyataan A salah dan Pernyataan B benar
F. Pernyataan A dan B salah

236 Persistent Storage


Politeknik Telkom Mobile Application

3. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan


berikut
A. Client(web browser) akan me-request sebuah web page dengan cara
mespesifikasikan path dengan command Get atau POST. Pada
method GET, parameter telah dispesifikasikan dan dilekatkan pada
URL.
B. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport.

C. Pernyataan A dan B benar


D. Pernyataan A benar dan pernyataan B salah
E. Pernyataan A salah dan Pernyataan B benar
F. Pernyataan A dan B salah

4. sebagian dari data record. Jika Anda ingin untuk memodifikasi sebuah
record Anda harus:

1. openRecordStore(String recordStoreName,boolean
createIfNecessary)
2. openRecordStore(String recordStoreName,boolean
createIfNecessary, int authmode,boolean writable)
3. openRecordStore(String recordStoreName,String vendorName,
String suiteName)

A. 1,2,3
B. 2,3
C. 1,2
D. 1,3

Persistent Storage 237


Politeknik Telkom Mobile Application

Latihan

Penyimpanan Pilihan
Buat sebuah class yang dapat melangsungkan pemilihan pada program.
Class tersebut akan menyimpan pilihan pada sebuah Record Store.
Setiap record akan memiliki variabel name dan value. Setiap pasangan
variabel disimpan pada sebuah record. Name dan value disimpan pada
database sebagai string. Class Anda harus mengimplementasikan
method sebagai berikut :

public String readVar(RecordStore recStore, String name, String


defaultValue){ public void writeString(RecordStore recStore, String
name, String value);

238 Persistent Storage


Politeknik Telkom Mobile Application

Daftar Pustaka

1. Kim, Topley, J2ME in a Nutshell, O’Reilly. 2002.

2. J2ME: Step by step

239

Você também pode gostar