30
LAPORAN PRAKTIKUM MOBILE PROGRAMMING Oleh : YOGI SUDRAJAT (1083073) Kelas : TI / 3B JURUSAN TEKNIK INFORMATIKA POLITEKNIK POS INDONESIA BANDUNG 2010

Yogi Sudrajat_06 Persistance

Embed Size (px)

Citation preview

Page 1: Yogi Sudrajat_06 Persistance

LAPORAN PRAKTIKUMMOBILE PROGRAMMING

Oleh :YOGI SUDRAJAT (1083073)

Kelas : TI / 3B

JURUSAN TEKNIK INFORMATIKA

POLITEKNIK POS INDONESIA

BANDUNG

2010

Page 2: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 2

HALAMAN PENGESAHAN

Judul Praktikum : Persistence

Sub Judul Praktikum : 1. Record Store

2. Record Enumeration

3. Record Comparator

4. Record Listener

5. Latihan Penyimpanan Pilihan

Tanggal Praktikum : 18 Desember2010

Tanggal Penyerahan Laporan : 25 Desember 2010

Tempat Praktikum : Laboratorium Komputer 306

Alat dan Software : 1. Laptop/PC

2. Wireless Toolkit 2.5

3. OS Windows XP 3

Kelas : 3B

Nama : Yogi Sudrajat (1083073)

Jurusan : Teknik Informatika

Bandung, Desember 2010

Menyetujui

Dosen Pengajar

Azizah Zakiah, S.Kom

Page 3: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 3

KATA PENGANTAR

Puji syukur kami panjatkan kehadirat Allah swt, karena atas rahmat-Nya lah penulis

dapat menyelesaikan Tugas Praktikum Mobile Programming (Java) dengan baik. Laporan

Praktikum 7 Mobile Programming ini Penulis buat dengan penuh tanggung jawab sebagai

seorang mahasiswa.

Adapun isi dari Laporan ini adalah mengenai mobile programming yaitu Persistence

menggunakan Sun Wireless Tool Kit 2.5 yang kami lakukan di Laboratorium komputer 306

Teknik Informatika pada pertemuan ke-8 masa perkuliahan di semester ganjil ini.

Demikian Laporan Praktikum Mobile Programming ini kami buat, sebagai hasil

praktikum yang telah kami lakukan pada semester ganjil ini. Kritik dan saran yang

membangun sangat kami harapkan sehingga kedepannya nanti dapat lebih baik.

Penyusun,

Yogi Sudrajat

Page 4: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 4

DAFTAR ISI

JUDUL LAPORAN......................................................................................... 1HALAMAN PENGESAHAN ......................................................................... 2KATA PENGANTAR .................................................................................... 3DAFTAR ISI.................................................................................................... 4

I. LANDASAN TEORI................................................................................. 51.1 Persistence............................................................................................ 5

II. HASIL PRAKTIKUM DAN PEMBAHASAN......................................... 6Persistence ................................................................................................. 62.1 Record Store........................................................................................ 62.1.1 Membuat dan membuka sebuah record ........................................... 62.1.2 Menambahkan sebuah record .......................................................... 62.1.3 Mengambil kembali record .............................................................. 62.1.4 Meng-update sebuah record............................................................. 62.1.5 Menghapus record............................................................................ 72.1.6 Mendapatkan list dari Record Store................................................. 72.1.7 Menyimpan data primitive java ....................................................... 72.1.8 Method lain untuk record strores ...................................................... 72.2 Record Enumeration ........................................................................... 132.3 Record Comparator ............................................................................ 162.4 Record Filter ....................................................................................... 192.5 Record Listener .................................................................................. 232.6 Latihan Penyimpanan Pilihan ............................................................. 23

III. KESIMPULAN......................................................................................... 303.1 Kesimpulan ......................................................................................... 30

Page 5: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 5

BAB I

LANDASAN TEORI

1.1 PERSISTENCE

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.

Page 6: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 6

BAB II

HASIL PRAKTIKUM DAN PEMBAHASAN

2.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.

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.

2.1.1 Membuat dan Membuka sebuah record

Method-method dibawah ini digunakan untuk membuat dan membuka sebuah record

store:

2.1.2 Menambahkan sebuah record

Method addRecord akan membuat record yang baru didalam Record Store dan akan

mengembalikan record ID.

2.1.3 Mengambil kembali Record

Bentuk pertama dari method getRecord akan mengembalikan copy dari data stored

yang ada didalam record tertentu berdasarkan RecordID. Bentuk kedua akan mengcopy 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.

2.1.4 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

Page 7: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 7

2. Meng-update record didalam memory

3. Memanggil setRecord untuk mengupdate data record

2.1.5 Menghapus Record

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

berikutnya 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.

2.1.6 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.

2.1.7 Menyimpan Data Primitive 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).

2.1.8 Method Lain untuk Record Stores

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().

Page 8: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 8

Contoh Program Record Store “Menambah Item”

/* Nama : Yogi Sudrajat

* Ti -3B 1083073

*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

public class RMSExample extends MIDlet implements CommandListener {

Display display;

List recList;

RecordStore recStore;

byte[] data = null;

Command exitCommand = new Command("Exit", Command.EXIT, 1);

Command newCommand = new Command("New Item", Command.OK, 1);

Ticker ticker = new Ticker("Yogi Sudrajat - Politeknik Pos Indonesia");

public RMSExample(){

recList = new List("Yogi Record Store",List.IMPLICIT);

dispRec();

recList.setTicker(ticker);

recList.addCommand(exitCommand);

recList.addCommand(newCommand);

recList.setCommandListener(this);

}

public void startApp() {

if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);

}

}

public void pauseApp(){

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable d){

if (c== exitCommand){

destroyApp(true);

notifyDestroyed();// Exit

}

if (c== newCommand){

Page 9: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 9

try{

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

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

// Ini adalah String yang akan kita masukkan kedalam record

String newItem="YogiRecord#" + recStore.getNextRecordID();

// Konversikan String ke byte array

data=newItem.getBytes();

// Tulislah record kedalam record store

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

recStore.closeRecordStore();

}catch(Exception e){

System.out.println(e.toString());

}

dispRec();

}

}

public void dispRec(){

recList.deleteAll();

String[] data = getRecordList();

if(data.length>0){

for(int i=0;i<data.length;i++)

recList.append(data[i],null);

}

}

public String[] getRecordList(){

try{

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

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

// Masukkan content kedalam record store

String[] dataList= new String[recStore.getNumRecords()];

if (recStore.getNumRecords()>0){

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

int size = recStore.getRecordSize( recId );

if( data == null || data.length < size ){

data=new byte[size+20];

}

//getRecordmemilikireturnvalue berupa panjang dari record

int recLength = recStore.getRecord(recId,data,0);

// Mengkonversikan byte array menjadi String

dataList[recId-1] = new String(data, 0, recLength);

Page 10: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 10

}

}

recStore.closeRecordStore();

return dataList;

}catch (Exception e){

return null;

}

}

}

Output :

Page 11: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 11

Contoh Program Record Store “Membaca Record Store”

/* Nama : Yogi Sudrajat

* TI 3B - 1083073

*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

public class RmsList extends MIDlet implements CommandListener {

Display display;

List recList;

RecordStore recStore;

byte[] data = null;

Command exitCommand = new Command("Exit", Command.EXIT, 1);

Ticker ticker = new Ticker(

"Yogi Sudrajat - Politeknik Pos Indonesia");

public RmsList(){

recList = new List("Record Store List",List.IMPLICIT);

dispList();

recList.setTicker(ticker);

recList.addCommand(exitCommand);

recList.setCommandListener(this);

}

public void startApp() {

if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);

}

}

public void pauseApp(){

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable d){

if (c== exitCommand){

destroyApp(true);

notifyDestroyed();// Exit

}

Page 12: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 12

}

public void dispList(){

recList.deleteAll();

try{

String[] data= recStore.listRecordStores();

if(data.length>0){

for(int i=0;i<data.length;i++)

recList.append(data[i],null);

}

}catch (Exception e){

}

}

}

Output

Page 13: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 13

2.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.

Contoh Program Record Enumeration

/* Nama : Yogi Sudrajat

* TI 3B - 1083073

*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

import java.io.*;

public class RmsExample2 extends MIDlet implements CommandListener {

Display display;

List recList;

RecordStore recStore;

byte[] data = null;

Command exitCommand = new Command("Exit", Command.EXIT, 1);

Command newCommand = new Command("New Item", Command.OK, 1);

Ticker ticker = new Ticker("Yogi Sudrajat - Politeknik Pos Indonesia");

public RmsExample2(){

recList = new List("Record List",List.IMPLICIT);

dispRec();

recList.setTicker(ticker);

recList.addCommand(exitCommand);

recList.addCommand(newCommand);

recList.setCommandListener(this);

}

public void startApp() {

if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);

}

}

public void pauseApp(){

Page 14: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 14

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable d){

if (c== exitCommand){

destroyApp(true);

notifyDestroyed();// Exit

}

if (c== newCommand){

try{

// Buka dan atau buatlah record store dengan nama “RmsExample2”

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

ByteArrayOutputStream out = new ByteArrayOutputStream();

DataOutputStream dOut= new DataOutputStream(out);

//Menyimpansebuahinteger

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);

dOut.close();

out.close();

recStore.closeRecordStore();

}catch(Exception e){

System.out.println(e.toString());

}

dispRec();

}

}

public void dispRec(){

recList.deleteAll();

try{

// 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, false);

while (enumerator.hasNextElement()){

//MenujuRecordselanjutnya

Page 15: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 15

byte[] recBytes = enumerator.nextRecord();

ByteArrayInputStream in = new ByteArrayInputStream(recBytes);

DataInputStream dIn = new DataInputStream(in);

int count=dIn.readInt();

String item = dIn.readUTF();

recList.append(count+","+item,null);

dIn.close();

in.close();

}

recStore.closeRecordStore();

}catch (Exception e){

}

}

}

Output

Page 16: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 16

2.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.

Contoh Program Record Comparator

/* Nama : Yogi Sudrajat

* TI 3B - 1083073

*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

import java.io.*;

public class RmsComparator extends MIDlet implements CommandListener,RecordComparator {

Display display;

List recList;

RecordStore recStore;

byte[] data = null;

Command exitCommand = new Command("Exit", Command.EXIT, 1);

Command newCommand = new Command("New Item", Command.OK, 1);

Ticker ticker = new Ticker("Yogi Sudrajat - Politeknik Pos Indonesia");

public RmsComparator(){

recList = new List("Record List",List.IMPLICIT);

dispRec();

recList.setTicker(ticker);

recList.addCommand(exitCommand);

recList.addCommand(newCommand);

recList.setCommandListener(this);

}

public void startApp() {

if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);

}

}

Page 17: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 17

public void pauseApp(){

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable d){

if (c== exitCommand){

destroyApp(true);

notifyDestroyed();// Exit

}

if (c== newCommand){

try{

// Buka dan atau buatlah record store dengan nama “RmsComparator”

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

ByteArrayOutputStream out = new ByteArrayOutputStream();

DataOutputStream dOut= new DataOutputStream(out);

//Menyimpansebuahinteger

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);

dOut.close();

out.close();

recStore.closeRecordStore();

}catch(Exception e){

System.out.println(e.toString());

}

dispRec();

}

}

public void dispRec(){

recList.deleteAll();

try{

// Membuka atau membuat sebuah record store dengan nama "RmsComparator"

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

// Mengambil isi dari record store

RecordEnumeration enumerator

= recStore.enumerateRecords(null, this, false);

while (enumerator.hasNextElement()){

Page 18: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 18

//MenujuRecordselanjutnya

byte[] recBytes = enumerator.nextRecord();

ByteArrayInputStream in = new ByteArrayInputStream(recBytes);

DataInputStream dIn = new DataInputStream(in);

int count=dIn.readInt();

String item = dIn.readUTF();

recList.append(count+","+item,null);

dIn.close();

in.close();

}

recStore.closeRecordStore();

}catch (Exception e){

}

}

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

String record1 = new String(rec1).toUpperCase();

String record2 = new String(rec2).toUpperCase();

//Sorting Ascending

if (record1.compareTo(record2) < 0){

return(PRECEDES);

} else{

if (record1.compareTo(record2) > 0){

return(FOLLOWS);

} else{

return(EQUIVALENT);

}

}

}

}

Output

Page 19: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 19

2.4 RECORD FILTER

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 kriteria.

Contoh Program Record Filter

/* Nama : Yogi Sudrajat

* TI 3B - 1083073

*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

import java.io.*;

public class RmsFilter extends MIDlet implements

CommandListener,RecordComparator,RecordFilter {

Display display;

Page 20: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 20

List recList;

RecordStore recStore;

byte[] data = null;

Command exitCommand = new Command("Exit", Command.EXIT, 1);

Command newCommand = new Command("New Item", Command.OK, 1);

Ticker ticker = new Ticker("Yogi Sudrajat - Politeknik Pos Indonesia");

public RmsFilter(){

recList = new List("Record List",List.IMPLICIT);

dispRec();

recList.setTicker(ticker);

recList.addCommand(exitCommand);

recList.addCommand(newCommand);

recList.setCommandListener(this);

}

public void startApp() {

if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);

}

}

public void pauseApp(){

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable d){

if (c== exitCommand){

destroyApp(true);

notifyDestroyed();// Exit

}

if (c== newCommand){

try{

// Buka dan atau buatlah record store dengan nama “RmsFilter”

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

ByteArrayOutputStream out = new ByteArrayOutputStream();

DataOutputStream dOut= new DataOutputStream(out);

//Menyimpansebuahinteger

dOut.writeInt(recStore.getNextRecordID()* recStore.getNextRecordID());

// Menyimpan sebuah string

dOut.writeUTF("Record #" + recStore.getNextRecordID());

byte[] bytes = out.toByteArray();

Page 21: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 21

// Menuliskan Record pada Store

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

dOut.close();

out.close();

recStore.closeRecordStore();

}catch(Exception e){

System.out.println(e.toString());

}

dispRec();

}

}

public void dispRec(){

recList.deleteAll();

try{

// Membuka atau membuat sebuah record store dengan nama "RmsFilter"

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

// Mengambil isi dari record store

RecordEnumeration enumerator

= recStore.enumerateRecords(this, this, false);

while (enumerator.hasNextElement()){

//MenujuRecordselanjutnya

byte[] recBytes = enumerator.nextRecord();

ByteArrayInputStream in = new ByteArrayInputStream(recBytes);

DataInputStream dIn = new DataInputStream(in);

int count=dIn.readInt();

String item = dIn.readUTF();

recList.append(count+","+item,null);

dIn.close();

in.close();

}

recStore.closeRecordStore();

}catch (Exception e){

}

}

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

String record1 = new String(rec1).toUpperCase();

String record2 = new String(rec2).toUpperCase();

//Sorting Ascending

if (record1.compareTo(record2) < 0){

return(PRECEDES);

Page 22: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 22

} else{

if (record1.compareTo(record2) > 0){

return(FOLLOWS);

} else{

return(EQUIVALENT);

}

}

}

public boolean matches(byte[] candidate){

boolean isaMatch = false;

try{

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){recList.append(e.toString(), null); }

return(isaMatch);

}

}

Output

Page 23: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 23

2.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.

2.6 LATIHAN PENYIMPANAN PILIHAN

/* Nama : Yogi Sudrajat

* TI - 3B - 1083073

*/

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.rms.*;

public class DemoRMS extends MIDlet

implements CommandListener {

private Display display;

private Form form;

Page 24: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 24

private RecordStore rs;

private RecordEnumeration re;

private ChoiceGroup choicegroup;

private Alert alert;

private List list;

//untuk proses entri data

private Form entri; private TextField tfNama, tfNoTelp;

private final Command cmdKeluar =

new Command("Keluar", Command.EXIT, 1);

private final Command cmdPilih =

new Command("Pilih", Command.OK, 1);

private final Command cmdSimpan =

new Command("Simpan", Command.SCREEN, 1);

private final Command cmdHapus =

new Command("Hapus", Command.SCREEN, 1);

private final Command cmdKembali =

new Command("Kembali", Command.BACK, 1);

public DemoRMS() {

display = Display.getDisplay(this);

alert = new Alert(null);

alert.setTimeout(Alert.FOREVER);

list = new List(null, Choice.IMPLICIT);

rs = null;

// membuat atau membuka record store

try {

rs = RecordStore.openRecordStore("contohDB", true);

} catch (RecordStoreException rse) {

alert.setString("Record store tidak dapat dibuka. " +

"Aplikasi akan dihetikan");

alert.setType(AlertType.ERROR);

display.setCurrent(alert, null);

System.exit(1);

}

}

Page 25: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 25

public void startApp() {

form = new Form("Demo RMS");

choicegroup = new ChoiceGroup("Menu:", Choice.EXCLUSIVE);

choicegroup.append("Tambah Record", null);

choicegroup.append("Daftar Record", null);

form.append(choicegroup);

form.addCommand(cmdKeluar);

form.addCommand(cmdPilih);

form.setCommandListener(this);

display.setCurrent(form);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

public void commandAction(Command c, Displayable s) {

if (c == cmdKeluar) {

destroyApp(false);

notifyDestroyed();

} else if (c == cmdPilih) {

switch (choicegroup.getSelectedIndex()) {

case 0: {

entriData();

break;

}

case 1: {

lihatRecord();

break;

}

}

} else if (c == cmdKembali) {

display.setCurrent(form);

} else if (c == cmdSimpan) {

alert.setType(AlertType.INFO);

Page 26: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 26

if (!tfNama.equals("") && !tfNoTelp.equals("")) {

tambahRecord(tfNama.getString(), tfNoTelp.getString());

alert.setString("Data baru telah berhasil disimpan");

display.setCurrent(alert, form);

} else {

alert.setString("Data NAMA dan NO. TELP " +

"tidak boleh kosong");

display.setCurrent(alert, entri);

}

} else if (c == cmdHapus) {

int pos =

list.getString(list.getSelectedIndex()).indexOf(" [");

String nama = list.getString(

list.getSelectedIndex()).substring(0, pos);

hapusRecord(nama);

}

}

public void tambahRecord(String nama, String noTelp) {

byte[] temp = null;

try {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

DataOutputStream dos = new DataOutputStream(baos);

dos.writeUTF(nama);

dos.writeUTF(noTelp);

temp = baos.toByteArray();

} catch (IOException ioe) {

ioe.printStackTrace();

}

try {

rs.addRecord(temp, 0, temp.length);

} catch (RecordStoreNotOpenException rsnoe) {

rsnoe.printStackTrace();

} catch (RecordStoreException rse) {

rse.printStackTrace();

}

}

public void lihatRecord() {

byte[] temp = null;

Page 27: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 27

list.setTitle("Daftar Record");

list.deleteAll();

try {

re = rs.enumerateRecords(null, null, false);

while (re.hasNextElement()) {

int i = re.nextRecordId();

temp = rs.getRecord(i);

ByteArrayInputStream bais =

new ByteArrayInputStream(temp);

DataInputStream dis = new DataInputStream(bais);

try {

String nama = dis.readUTF();

String noTelp = dis.readUTF();

list.append(nama + " [" + noTelp + "]", null);

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

list.addCommand(cmdKembali);

list.addCommand(cmdHapus);

list.setCommandListener(this);

display.setCurrent(list);

} catch (InvalidRecordIDException invID) {

invID.printStackTrace();

} catch (RecordStoreNotOpenException rsnoe) {

rsnoe.printStackTrace();

} catch (RecordStoreException rse) {

rse.printStackTrace();

}

}

public void hapusRecord(String nama) {

byte[] temp = null;

try {

re = rs.enumerateRecords(null, null, false);

while (re.hasNextElement()) {

int i = re.nextRecordId();

temp = rs.getRecord(i);

ByteArrayInputStream bais =

Page 28: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 28

new ByteArrayInputStream(temp);

DataInputStream dis = new DataInputStream(bais);

try {

String vNama = dis.readUTF();

if (vNama.equals(nama)) {

rs.deleteRecord(i);

break;

}

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

re.rebuild();

lihatRecord();

} catch (RecordStoreNotOpenException rsnoe) {

rsnoe.printStackTrace();

} catch (RecordStoreException rse) {

rse.printStackTrace();

}

}

public Form entriData() {

entri = new Form("Entri Data");

tfNama = new TextField("Nama:", null, 25, TextField.ANY);

tfNoTelp = new TextField("No. Telepon:", null, 15,

TextField.PHONENUMBER);

entri.append(tfNama);

entri.append(tfNoTelp);

entri.addCommand(cmdSimpan);

entri.addCommand(cmdKembali);

entri.setCommandListener(this);

display.setCurrent(entri);

return entri;

}

}

Page 29: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 29

Output Program

Page 30: Yogi Sudrajat_06 Persistance

Tugas 6 Persistence – Yogi Sudrajat 30

BAB III

KESIMPULAN

3.1 Kesimpulan

Kesimpulan berdasarkan hasil pembahasan dan praktikum, yaitu:

MIDP menyediakan sebuah API dimana program dapat menyimpan data-data aplikasi secara

lokal didalam device tersebut. Data akan disimpan dalam non-volatile memory didalam

device.

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.