Skip to content →

[Blackberry] Persistent Data Store

Persistent Data Store atau biasa disebut Persistent Store, adalah media penyimpanan data yang fleksibel dan konstan. Kita dapat menyimpan seluruh data tanpa harus serialize data terlebih dahulu. Tidak ada batas ukuran dalam Persistent Store, tapi ada batasan untuk tiap objek yaitu 64 Kb.

Persisten Store berbeda tidak memiliki relasi data seperti database pada umumnya, karena data akan tersimpan dalam memori Blackberry dalam bentuk objek. Data yang disimpan pada Persistent Store bersifat permanen, data tersebut tetap tersimpan walaupun aplikasi ditutup.

Untuk menggunakannya kita dapat memanfaatkan Hashtable untuk memetakan data yang akan kita simpan. Karena Hashtable memiliki kemampuan untuk memberikan kunci pada tiap data yang kita simpan, jadi semisal kita ingin membaca suatu data kita hanya perlu memanggil kunci-nya dan kita akan mendapatkan data yang tersimpan pada objek kunci tersebut.

Kalo udah ada Hashtable yang bisa menyimpan data, kenapa harus pake Persistent?

Gampangnya, Hastable cuma kelas yang digunakan untuk menyimpan data saja, namun ia tidak memiliki fungsi2 untuk me-manage data yang disimpan. Kalo kita hanya menggunakan Hashtable, maka data yang disimpan tidak akan bersifat permanen karena Hashtable tidak memiliki fungsi untuk meng-commit suatu aktivitas. Nah agar data yang kita simpan bersifat permanen, kita gunakan Persistent untuk me-manage nya. Nah semakin keliatan strukturnya nih, data disimpan dalam Hashtable, dan Hashtable dimasukkan ke dalam Persistent.

Mari mari deh… Pertama kita buat dahulu kelas yang berfungsi untuk menyimpan data.

DataStore.java

public class DataStore {	
	private static DataStore instance;
	private static final long ID_LONG = 0x2b16b73b795eb761L;
	private final PersistentObject store;
	private final Hashtable settingItem;

	private DataStore() {
		store = PersistentStore.getPersistentObject(ID_LONG);
		Hashtable temp = (Hashtable) store.getContents();
		settingItem = temp == null ? new Hashtable() : temp;
	}

	public static DataStore getInstance() {
		if (instance == null) {
			instance = new DataStore();
		}
		return instance;
	}	

	public void addItem(String key, Object value) {
		settingItem.put(key, value);
	}

	public Hashtable getAllItems() {
		return settingItem;
	}

	public Object getItem(String name) {
		return settingItem.get(name);
	}

	public Boolean getBooleanItem(String key) {
		Object value = getItem(key);
		return value instanceof Boolean ? (Boolean) value : Boolean.FALSE;
	}

	public int size() {
		return settingItem.size();
	}

	public void commit() {
		synchronized (store) {
			store.setContents(settingItem);
			store.commit();
		}
	}

	public void clear() {
		settingItem.clear();
	}

	public void delete(String key){
		settingItem.remove(key);
	}
}

Kemudian untuk menggunakan kelas tersebut, lihat contoh dibawah ini

public final class MyScreen extends MainScreen implements FieldChangeListener {
	private EditField editKey, editValue;
	private ButtonField tombolSimpan, tombolLihatData;
	private DataStore dataStore;
	private HorizontalFieldManager h;

	public MyScreen() {
		editKey = new EditField("Masukkan Kunci : ", null, 10, 0);
		editValue = new EditField("Masukkan Nilai : ", null, 30, 0);
		h = new HorizontalFieldManager(Manager.FIELD_HCENTER);
		tombolSimpan = new ButtonField("Simpan", DrawStyle.HCENTER);
		tombolLihatData = new ButtonField("Lihat Data", DrawStyle.HCENTER);
		dataStore = DataStore.getInstance();

		h.add(tombolSimpan);
		h.add(tombolLihatData);

		add(editKey);
		add(editValue);
		add(h);

		tombolSimpan.setChangeListener(this);
		tombolLihatData.setChangeListener(this);
	}

	public void fieldChanged(Field field, int context) {
		if (field == tombolSimpan) {
			simpan();
		} else if (field == tombolLihatData) {
			lihatData();
		}
	}

	private void lihatData() {
		for(Enumeration e = dataContext.getData().keys();e.hasMoreElements();){
			String key = (String) e.nextElement();
			Dialog.alert(key +" --> "+dataStore.getAllItems().get(key));	
		}
	}

	private void simpan() {
		dataStore.addItem(editKey.getText(), editValue.getText());
		Dialog.alert("Data Tersimpan!");
	}
}

Nah kode hanya untuk menyimpan dan melihat data yang telah tersimpan. Cukup mudah, pertama kita perlu menginstansiasi kelas DataStore dengan method getInstance(). Setelah diinstansiasi, kita tinggal menggunakannya saja, untuk menyimpan data, gunakan method addItem(key, value). dan untuk mengakses data kita gunakan kelas Enumeration untuk memanggil objek pada Hashtable.

Tetapi data diatas belom disimpan secara permanen seperti yang saya katakan diatas. Untuk menyimpan secara permanen, gunakan method commit() yang telah kita buat di kelas DataStore. Silakan dicoba sendiri.. Bedakan ketika kita gunakan commit() dan tidak menggunakannya….

Published in Blackberry Database

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *