2012-05-30 194 views
9

我想知道是否可以在共享首選項中保存一個字符串數組,以這種方式,每次我們保存某個字符串時,都會將其存儲在該數組中。在SharedPreferences中存儲字符串數組

例如,我有一個具有特定ID的位置的列表,我想將其標記爲收藏。 理想的情況是,在該數組中有一個數組並保存某個位置ID(我們稱之爲Location1),所以下次我想將新位置標記爲收藏夾(我們稱之爲Location2)時,我將檢索該數組到目前爲止包含Location1)並添加我想要添加的這個新位置的ID(Location2)。

Android有方法來存儲原始對象,但不是陣列。 任何想法,爲了做到這一點,請?

+0

AFAIK共享prefrences用於原語數據類型 –

+0

http://stackoverflow.com/questions/7873682/is-it-possible-to-stored-classs-static-object-in-shared-preferenc e/7873759#7873759 –

回答

1

編寫讀取和寫入串行化數組的方法。這不應該太難。只需將字符串數組平鋪爲您存儲在首選項中的單個字符串即可。另一種選擇是將數組轉換爲XML結構,然後將其存儲在首選項中,但這可能是過度的。

23

這是可行的:I was just blogging about it

保存您的ARRAY

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

檢索您的ARRAY

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

剛剛寫道,所以可能會有錯別字。

+3

查看本帖子的答案。 http://stackoverflow.com/questions/7057845/save-arraylist-to-sharedpreferences – AndroidLearner

+0

@Sherif elKhatib它的作品就像一個魅力!非常感謝 – noloman

+0

@noloman歡迎您檢查博客的功能..更通用 –

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

只是一個替代解決方案,我已經使用在過去