3 回答

TA貢獻1816條經(jīng)驗 獲得超4個贊
記錄了此行為,因此是設(shè)計使然:
從getStringSet:
“請注意,您一定不能修改此調(diào)用返回的設(shè)置實例。如果這樣做,不能保證存儲數(shù)據(jù)的一致性,也不能保證完全修改實例?!?/p>
而且似乎很合理,特別是如果在API中進行了說明,否則此API將必須在每次訪問時進行復(fù)制。因此,這種設(shè)計的原因可能是性能。我想他們應(yīng)該使此函數(shù)返回包裝在不可修改的類實例中的結(jié)果,但這又需要分配。

TA貢獻1839條經(jīng)驗 獲得超15個贊
正在尋找相同問題的解決方案,并通過以下方式解決了該問題:
1)從共享首選項中檢索現(xiàn)有集合
2)制作一個副本
3)更新副本
4)保存副本
SharedPreferences.Editor editor = sharedPrefs.edit();
Set<String> oldSet = sharedPrefs.getStringSet("key", new HashSet<String>());
//make a copy, update it and save it
Set<String> newStrSet = new HashSet<String>();
newStrSet.add(new_element);
newStrSet.addAll(oldSet);
editor.putStringSet("key",newStrSet); edit.commit();
- 3 回答
- 0 關(guān)注
- 585 瀏覽
添加回答
舉報