9

我想知道是否可以在共享首选项中保存一个字符串数组,以某种方式,每次我们保存某个字符串时,我们都会将其存储在该数组中。

例如,我有一个带有特定 ID 的位置列表,我想将其标记为收藏。理想的情况是,拥有一个数组并在该数组中保存某个位置 ID(我们称之为 Location1),所以下次我想将一个新位置标记为收藏(我们称之为 Location2)时,我检索该数组(其中到目前为止包含 Location1) 并添加我要添加的这个新位置的 ID (Location2)。

Android 有存储原始对象的方法,但没有存储数组的方法。有什么想法可以做到这一点吗?

4

3 回答 3

23

这是可行的:我只是在写博客

保存您的阵列

//String array[]
//SharedPreferences prefs
Editor edit = prefs.edit();
edit.putInt("array_size", array.length);
for(int i=0;i<array.length; i++)
    edit.putString("array_" + i, array[i]);
edit.commit();

检索您的阵列

int size = prefs.getInt("array_size", 0);
array = new String[size];
for(int i=0; i<size; i++)
    prefs.getString("array_" + i, null);

刚写的,可能有错别字。

于 2012-05-30T09:55:09.190 回答
15

您可以使数组成为 JSON 数组,然后像这样存储它:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0);
SharedPreferences.Editor editor = settings.edit();

JSONArray jArray = new JSONArray();
try {
    jArray.put(id);
} catch (JSONException e) {
    e.printStackTrace();
}

editor.putString("jArray", jArray.toString());
editor.commit();

然后你可以得到这样的数组:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0);
try {
    JSONArray jArray = new JSONArray(settings.getString("jArray", ""));
} catch (JSONException e) {
    e.printStackTrace();
}

只是我过去使用的替代解决方案

于 2013-08-02T22:49:22.827 回答
1

编写方法来读取和写入序列化数组。这应该不会太难。只需将字符串数组展平为您存储在首选项中的单个字符串。另一种选择是将数组转换为 XML 结构,然后将其存储在首选项中,但这可能是矫枉过正。

于 2012-05-30T09:53:40.353 回答