Blackberry - application settings save/load

Posted by Max Gontar on Stack Overflow See other posts from Stack Overflow or by Max Gontar
Published on 2009-09-25T12:20:11Z Indexed on 2010/04/30 15:47 UTC
Read the original article Hit count: 368

Hi! I know two ways to save/load application settings:

I'd like to know what are you're practicies of working with application settings?

Using PersistentStore to save/load application settings

The persistent store provides a means for objects to persist across device resets. A persistent object consists of a key-value pair. When a persistent object is committed to the persistent store, that object's value is stored in flash memory via a deep copy. The value can then be retrieved at a later point in time via the key.

Example of helper class for storing and retrieving settings:

class PSOptions {
    private PersistentObject mStore;
    private LongHashtableCollection mSettings;
    private long KEY_URL = 0;
    private long KEY_ENCRYPT = 1;
    private long KEY_REFRESH_PERIOD = 2;

    public PSOptions() {
    	// "AppSettings" = 0x71f1f00b95850cfeL
    	mStore = PersistentStore.getPersistentObject(0x71f1f00b95850cfeL);
    }

    public String getUrl() {
    	Object result = get(KEY_URL);
    	return (null != result) ? (String) result : null;
    }

    public void setUrl(String url) {
    	set(KEY_URL, url);
    }

    public boolean getEncrypt() {
    	Object result = get(KEY_ENCRYPT);
    	return (null != result) ? ((Boolean) result).booleanValue() : false;
    }

    public void setEncrypt(boolean encrypt) {
    	set(KEY_ENCRYPT, new Boolean(encrypt));
    }

    public int getRefreshPeriod() {
    	Object result = get(KEY_REFRESH_PERIOD);
    	return (null != result) ? ((Integer) result).intValue() : -1;
    }

    public void setRefreshRate(int refreshRate) {
    	set(KEY_REFRESH_PERIOD, new Integer(refreshRate));
    }

    private void set(long key, Object value) {
    	synchronized (mStore) {
    		mSettings = (LongHashtableCollection) mStore.getContents();
    		if (null == mSettings) {
    			mSettings = new LongHashtableCollection();
    		}
    		mSettings.put(key, value);
    		mStore.setContents(mSettings);
    		mStore.commit();
    	}
    }

    private Object get(long key) {
    	synchronized (mStore) {
    		mSettings = (LongHashtableCollection) mStore.getContents();
    		if (null != mSettings && mSettings.size() != 0) {
    			return mSettings.get(key);
    		} else {
    			return null;
    		}
    	}
    }
}

sample app screen

Example of use:

class Scr extends MainScreen implements FieldChangeListener {
    PSOptions mOptions = new PSOptions();

    BasicEditField mUrl = new BasicEditField("Url:",
    		"http://stackoverflow.com/");
    CheckboxField mEncrypt = new CheckboxField("Enable encrypt", false);
    GaugeField mRefresh = new GaugeField("Refresh period", 1, 60 * 10, 10,
    		GaugeField.EDITABLE|FOCUSABLE);
    ButtonField mLoad = new ButtonField("Load settings",
    		ButtonField.CONSUME_CLICK);
    ButtonField mSave = new ButtonField("Save settings",
    		ButtonField.CONSUME_CLICK);

    public Scr() {
    	add(mUrl);
    	mUrl.setChangeListener(this);
    	add(mEncrypt);
    	mEncrypt.setChangeListener(this);
    	add(mRefresh);
    	mRefresh.setChangeListener(this);
    	HorizontalFieldManager hfm = new HorizontalFieldManager(USE_ALL_WIDTH);
    	add(hfm);
    	hfm.add(mLoad);
    	mLoad.setChangeListener(this);
    	hfm.add(mSave);
    	mSave.setChangeListener(this);
    	loadSettings();
    }

    public void fieldChanged(Field field, int context) {
    	if (field == mLoad) {
    		loadSettings();
    	} else if (field == mSave) {
    		saveSettings();
    	}
    }

    private void saveSettings() {
    	mOptions.setUrl(mUrl.getText());
    	mOptions.setEncrypt(mEncrypt.getChecked());
    	mOptions.setRefreshRate(mRefresh.getValue());
    }

    private void loadSettings() {
    	mUrl.setText(mOptions.getUrl());
    	mEncrypt.setChecked(mOptions.getEncrypt());
    	mRefresh.setValue(mOptions.getRefreshPeriod());
    }
}

© Stack Overflow or respective owner

Related posts about blackberry

Related posts about application-settings