İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

RMS (Record Management System)- Kayıt Yönetim Sistemi

MIDP cep telefonuna bilgi saklama desteği sağlar. Bu şekilde bir program kapanırken sakladığı bilgilere açılırken ulaşabilir. Örneğin kullanıcının midlet ile ilgili yaptığı ayarlar kayıt edilebilir. Böylece kullanıcının yaptığı ayarlar her zaman saklanmış olur.

Kayıt işlemi için javax.microedition.rms paketi kullanılır. Bu pakette tek bir class vardır: RecordStore. Bu class'ta üç static method bulunmaktadır.

Her kayıt için bir ID tutulur. Böylece birden fazla kayıt tutulabilir. Bir kayıt içine bir dizi, birden fazla int,String vs.. tipleri saklanabilir.

Aşağıdaki örnekte bir kullanıcının adı ve yaşı programdan çıkıldığında kaydedilmektedir. Program açıldığında eğer isim ve yaş daha önce kaydedilmişse o değerler gösterilmektedir. O değerleri değiştirip programdan çıkılırsa yeni değerler saklanmaktadır.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.rms.*;
  3 import javax.microedition.lcdui.*;
  4 import java.io.*;
  5 import javax.microedition.lcdui.*;
  6 public class RMSTest extends MIDlet implements CommandListener{
  7   Command exitCommand=new Command("Exit",Command.OK,1);
  8   TextField nameField;
  9   TextField ageField;
 10   protected void startApp(){
 11     Form form=new Form("Profile");
 12     nameField=new TextField("isim","",30,TextField.ANY);
 13     ageField=new TextField("yaş","",30,TextField.NUMERIC);
 14     form.append(nameField);
 15     form.append(ageField);
 16     form.addCommand(exitCommand);
 17     form.setCommandListener(this);
 18     setPofile();
 19     Display.getDisplay(this).setCurrent(form);
 20   }
 21   protected void pauseApp(){}
 22   protected void destroyApp(boolean boolean0){
 23     String name=nameField.getString();
 24     String age=ageField.getString();
 25     try {
 26       writePofile(name, Integer.parseInt(age));
 27     }
 28     catch (NumberFormatException e){
 29       e.printStackTrace();
 30     }
 31   }
 32   public void commandAction(Command c, Displayable d){
 33    if(c==exitCommand){
 34      destroyApp(false);
 35      notifyDestroyed();
 36    }
 37   }
 38   private void writePofile(String name,int age){
 39     try {
 40       RecordStore store=RecordStore.openRecordStore("profile",true);
 41       ByteArrayOutputStream baos=new ByteArrayOutputStream();
 42       DataOutputStream dos=new DataOutputStream(baos);
 43       dos.writeUTF(name);
 44       dos.writeInt(age);
 45       byte[] data=baos.toByteArray();
 46       if(store.getNumRecords()>0){
 47         store.setRecord(1,data,0,data.length);
 48       }else{
 49         store.addRecord(data,0,data.length);
 50       }
 51     }
 52     catch (Exception e) {
 53       e.printStackTrace();
 54     }
 55   }
 56   private void setPofile(){
 57     try{
 58       RecordStore store=RecordStore.openRecordStore("profile", false);
 59       byte[] record=store.getRecord(1);
 60       ByteArrayInputStream bais=new ByteArrayInputStream(record);
 61       DataInputStream dis=new DataInputStream(bais);
 62       String name=dis.readUTF();
 63       int age=dis.readInt();
 64       nameField.setString(name);
 65       ageField.setString(Integer.toString(age));
 66     }catch(Exception  e){
 67       e.printStackTrace();
 68     }
 69   }
 70 }

Bir form koyulmaktadır. Form'a iki text alanı koyulmaktadır. Bu alanlarda kullancının adı ve yaşı gözükecektir. Midlet yüklenirken setPofile() method'u çağrılır. Bu method daha önce bir kayıt olup olmadığına bakar. Eğer varsa bu kayıttan kullanıcı adını ve yaşını alır ve form'da gösterir.

RecordStore store=RecordStore.openRecordStore("profile", false);

ile "profile" id'li RecordStore istenir. Eğer yoksa Exception oluşur ve bir işlem gerçekleşmez.

byte[] record=store.getRecord(1);
ByteArrayInputStream bais=new ByteArrayInputStream(record);
DataInputStream dis=new DataInputStream(bais);
String name=dis.readUTF();
int age=dis.readInt();

işlemi ile kayıttan bilgi alınır. Biz her zaman tek bir kayıt tutacağız. Bu yüzden her zaman

store.getRecord(1);

şeklinde bilgiyi alacağız. Normalde birden fazla kayıt eklenebilir.

Kullanıcı yeni bir isim ve yaş girip programdan çıktığında çıktığında writePofile method'u çağrılır. Bu method'a form'dan yeni girilen değerler verilir.

RecordStore store=RecordStore.openRecordStore("profile",true);

ile "profile" id'li RecordStore açılır.

ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(baos);
dos.writeUTF(name);
dos.writeInt(age);
byte[] data=baos.toByteArray();

şeklinde data oluşturulur. Eğer daha önce bir kayıt varsa

store.setRecord(1,data,0,data.length);

çağrılarak set edilir. Ancak ilk defa kayıt ekleniyorsa

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

şeklinde eklenir. Eğer sadece addRecord deseydik

ali 30
veli 34
mehmet 23

gibi kayıtlar peş peşe eklenecekti. Halbuki biz tek bir kayıt olmasını istiyoruz ve bu yüzden setRecord method'unu kullanarak kayıt'ın değerlerini değiştiriyoruz.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır