一辅鲸、存儲集合數(shù)據(jù),重新打開App后數(shù)據(jù)丟失的問題
(一)問題描述
有個歷史記錄的存本地的功能腹殿,使用Set<String>保存數(shù)據(jù)独悴,然后獲取是對的,但是退出程序后重新進入锣尉,發(fā)現(xiàn)獲取的集合的元素和之前不一樣刻炒,比如說:保存的是A B C,獲取的是 A B C自沧,但退出后重新進入獲取的集合是空的坟奥,數(shù)據(jù)怎么丟了呢树瞭?
(二)解決辦法
原來是SharedPreferences 這個類的原因,從SharedPreferences獲取的數(shù)據(jù)爱谁,我們操作這個數(shù)據(jù)晒喷,并不會真的改變SharedPreferences里存儲的原始數(shù)據(jù),需要創(chuàng)建一個SharedPreferences 里面Set的副本访敌。
原來的寫法:
historySet = SPUtils.getInstance().getStringSet(SpExtraKeys.cityHistory);
更改后寫法:
historySet =new LinkedHashSet<String>(SPUtils.getInstance().getStringSet(SpExtraKeys.cityHistory));
這樣數(shù)據(jù)就不會丟失了~
二凉敲、存儲集合數(shù)據(jù),存儲前有序寺旺,讀取變無序
(一)問題描述
有個歷史記錄的存本地的功能爷抓,我使用的是LinkedHashSet <String>,元素嚴格按照放入順序排列阻塑,運行程序蓝撇,保存數(shù)據(jù),然后獲取是對的陈莽,順序也是對的渤昌,但是退出程序后重新進入,發(fā)現(xiàn)獲取的集合順序是錯的走搁。比如說:保存的順序是 A B C独柑,獲取的順序是 A B C,但退出后重新進入獲取的順序是 B C A朱盐,這是為什么群嗤?
(二)解決辦法
原來SharedPreferences在讀取配置xml文件時菠隆,碰到節(jié)點為“set”兵琳,即放入的stringSet對象,默認是生成一個HashSet對象進行保存的骇径,即不管在保存的時候你是使用LinkedHashSet 躯肌、TreeSet還是HashSet,當你讀取的時候都是獲取到HashSet對象破衔,讀取出來就變成了無序清女。
最后我還是使用了List轉(zhuǎn)成String存儲到SharedPreferences實現(xiàn)了這個功能,只能感嘆SharedPreferences有點坑~