2

アプリケーション設定を保存/ロードする2つの方法を知っています。

  • PersistentStoreを使用する
  • ファイルシステムを使用する(SDカードはオプションであるため、保存する)

アプリケーション設定をどのように操作しているのか知りたいのですが。

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;
            }
        }
    }
}

サンプルアプリ画面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());
    }
}
4

2 に答える 2

3

3番目のオプション:シンプルなアプリ設定にはRMSを使用します。

提案された永続ストアは素晴らしいように聞こえますが、他のJava電話とは互換性がないため、アプリを移植する必要がある場合は、この部分を再作成する必要があります

私はどこかで、ファイルシステム自体にファイルを作成するのは写真やビデオの場合にのみ行うべきだと読んだので、基本的にユーザーが別の方法で見ることができるコンテンツです。

于 2009-09-25T12:27:54.583 に答える
3

PersistentStoreを使用しており、アプリをアンインストールして再インストールした後でもデータが残っていることを確認できます。

更新:私が理解していることから、非ネイティブオブジェクトを永続化する場合(つまり、Hashtableのサブクラスを作成して保存する場合)、永続化されたクラスには意味がなくなるため、アプリをアンインストールすると、アプリの永続化されたデータはすべて消去されます。

于 2009-09-29T18:13:51.747 に答える