代码之家  ›  专栏  ›  技术社区  ›  Maksym Gontar

Blackberry-应用程序设置保存/加载

  •  2
  • Maksym Gontar  · 技术社区  · 17 年前

    我知道两种保存/加载应用程序设置的方法:

    我想知道您在应用程序设置方面有哪些实践经验?

    使用PersistentStore保存/加载应用程序设置

    持久存储为对象提供了一种跨设备重置持久化的方法。持久对象由键值对组成。当一个持久对象被提交到持久存储时,该对象的值通过深度拷贝存储在闪存中。然后可以在稍后的时间点通过键检索该值。

    用于存储和检索设置的帮助器类示例:

    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 http://img182.imageshack.us/img182/6348/appsettings.png

    使用示例:

    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());
        }
    }
    
    2 回复  |  直到 16 年前
        1
  •  3
  •   Toad    17 年前

    第三个选项:使用RMS进行简单的应用程序设置。

    我在某个地方读到,在文件系统本身上创建文件应该只在图片或视频的情况下进行,因此基本上用户也可以用另一种方式查看内容。

        2
  •  3
  •   Marc Novakowski    16 年前

    我们使用PersistentStore,我可以确认,即使在卸载和重新安装应用程序后,数据仍会保留。

    使现代化 :据我所知,如果您持久化一个非本机对象(即创建哈希表的子类并将其存储),那么卸载应用程序时,所有应用程序的持久化数据都将被删除,因为持久化类不再具有意义。

    推荐文章