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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Android 開發(fā)之 SharedPreferences 小坑

標(biāo)簽:
Android
小序

做过 Android 开发的对 SharedPreferences 应该是再熟悉不过了,除非你只写过小 Demo,否则不可能没用过 SharedPreferences,不过今天我还真被 SharedPreferences 小坑了一把。

起因

有个应用添加白名单需求,说白了就是保存一个包名的 Set,当时一想简单的需求没必要存在数据库里,存在 SharedPreferences 中最合适不过了,因为 SharedPreferences 提供 getStringSetputStringSet 接口,简直量身定制。于是把白名单包名的 Set 直接通过 putStringSet 存进 SharedPreferences,需要的时候再通过 getStringSet 读取出来,一切都是那么的迅速和顺利。

经过

当白名单需要更新时,我大概是这么实现的:

Set whiteList = config.getStringSet(Config.KEY_CLEAN_WHITELIST);
if (checkBox.isChecked()) {
  whiteList.add(runningApp.pkgName);
} else {
  whiteList.remove(runningApp.pkgName);
}
config.putStringSet(Config.KEY_CLEAN_WHITELIST, whiteList);

看过代码之后你有没有发现什么问题,如果没有那么恭喜你,你也入坑了!不过看没看出来都没关系,谁没踩过坑。好了,不卖关子了,上面的代码是无法正确更新 SharedPreferences 中的 Set 字段的,为什么?先看下官方 API 吧。

// getStringSet Added in API level 11
Set getStringSet (String key, Set defValues)

// Retrieve a set of String values from the preferences.

// Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all.

看到最后一段的 Note 没,『一定不要修改 getStringSet 的返回值,否则不能保证数据的一致性,而且你也没有能力去修改』,问题就出在这里了。

结果

知道问题所在当然就很好解决了,做一层额外的浅拷贝,然后对拷贝后的 Set 进行修改,再把结果通过 putStringSet 写回到 SharedPreferences 就 OK 了。

Set whiteList = config.getStringSet(Config.KEY_CLEAN_WHITELIST);
Set result = new HashSet<>(whiteList);
if (checkBox.isChecked()) {
  result.add(runningApp.pkgName);
} else {
  result.remove(runningApp.pkgName);
}
config.putStringSet(Config.KEY_CLEAN_WHITELIST, result);
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開發(fā)工程師
手記
粉絲
8798
獲贊與收藏
71

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

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

幫助反饋 APP下載

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

公眾號

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

舉報(bào)

0/150
提交
取消