Download - Yogi Sudrajat_06 Persistance
LAPORAN PRAKTIKUMMOBILE PROGRAMMING
Oleh :YOGI SUDRAJAT (1083073)
Kelas : TI / 3B
JURUSAN TEKNIK INFORMATIKA
POLITEKNIK POS INDONESIA
BANDUNG
2010
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
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
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
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.
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
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().
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){
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);
Tugas 6 Persistence – Yogi Sudrajat 10
}
}
recStore.closeRecordStore();
return dataList;
}catch (Exception e){
return null;
}
}
}
Output :
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
}
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
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(){
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
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
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);
}
}
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()){
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
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;
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();
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);
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
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;
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);
}
}
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);
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;
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 =
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;
}
}
Tugas 6 Persistence – Yogi Sudrajat 29
Output Program
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.