在SharedPreferences中存储一个String数组

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

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

Android有方法来存储原始对象,但不是数组。 任何想法,为了做到这一点,请?

Solutions Collecting From Web of "在SharedPreferences中存储一个String数组"

编写方法来读取和写入一个序列化的数组。 这不应该太困难。 只要将string数组放入您存储在首选项中的单个string即可。 另一个select是将数组转换成一个XML结构,然后存储在首选项中,但这可能是过度的。

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

保存你的arrays

//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(); 

检索你的arrays

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

刚才写到,所以可能会有错别字。

你可以使数组成为一个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(); } 

只是我过去使用的另一种解决scheme