3

私のアプリでは、単純な SparseBooleanArray をメモリに保存し、後で読み取る必要があります。SharedPreferences を使用して保存する方法はありますか?

SQLite データベースの使用を検討しましたが、このような単純なものにはやり過ぎのように思えました。StackOverflow で見つけた他の回答の中には、文字列として保存するために GSON を使用することを提案したものもありますが、このアプリを非常に軽量で高速なファイル サイズに保つ必要があります。サードパーティのライブラリに依存せずに、優れたパフォーマンスを維持しながらこれを達成する方法はありますか?

4

4 に答える 4

3

値を個別に書き込み、書き込む値の名前のリストを保持します。

    SparseBooleanArray array = //your array;
    SharedPreferences prefs = //your preferences

    //write
    SharedPreferences.Editor edit = prefs.edit();
    Set<String> keys = new HashSet<String>(array.size());
    for(int i = 0, z = array.size(); i < z; ++i) {
        int key = array.keyAt(i);
        keys.add(String.valueOf(key));
        edit.putBoolean("key_" + key, array.valueAt(i));
    }
    edit.putStringSet("keys", keys);
    edit.commit();

    //read
    Set<String> set = prefs.getStringSet("keys", null);
    if(set != null && !set.isEmpty()) {
        for (String key : set) {
            int k = Integer.parseInt(key);
            array.put(k, prefs.getBoolean("key_"+key, false));
        }
    }

文字列セットは API 11 以降でサポートされています。代わりに、セットを保存するのではなく、単一の csv 文字列を作成して分割することができます。

于 2014-07-31T08:16:30.017 に答える