第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用SharedPreferences存儲字符串集時的行為不當(dāng)

嘗試使用SharedPreferences存儲字符串集時的行為不當(dāng)

波斯汪 2019-12-26 13:58:15
我正在嘗試使用SharedPreferencesAPI存儲一組字符串。Set<String> s = sharedPrefs.getStringSet("key", new HashSet<String>());s.add(new_element);SharedPreferences.Editor editor = sharedPrefs.edit();editor.putStringSet(s);edit.commit()我第一次執(zhí)行上面的代碼時,s設(shè)置為默認(rèn)值(剛創(chuàng)建的結(jié)尾為empty HashSet),并且存儲時沒有問題。第二次和下一次執(zhí)行此代碼時,將s返回一個對象,并添加第一個元素。我可以添加該元素,并且在程序執(zhí)行期間,該元素顯然存儲在中SharedPreferences,但是當(dāng)程序被殺死時,SharedPreferences將從其持久性存儲中再次讀取并丟失較新的值。如何存儲第二個以及之后的元素,以免丟失?
查看完整描述

3 回答

?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

記錄了此行為,因此是設(shè)計使然:


從getStringSet:


“請注意,您一定不能修改此調(diào)用返回的設(shè)置實例。如果這樣做,不能保證存儲數(shù)據(jù)的一致性,也不能保證完全修改實例?!?/p>


而且似乎很合理,特別是如果在API中進行了說明,否則此API將必須在每次訪問時進行復(fù)制。因此,這種設(shè)計的原因可能是性能。我想他們應(yīng)該使此函數(shù)返回包裝在不可修改的類實例中的結(jié)果,但這又需要分配。


查看完整回答
反對 回復(fù) 2019-12-26
?
紫衣仙女

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


查看完整回答
反對 回復(fù) 2019-12-26
  • 3 回答
  • 0 關(guān)注
  • 585 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號