Android跨Activity读取SharedPreferences已存值返回0问题求助
问题根因
你读取SharedPreferences时调用的API和存储时的API不匹配,导致访问的不是同一个存储文件,自然读不到存入的值:
- 存储时你调用的是
getSharedPreferences("indemnity_calculation_kuwait",MODE_PRIVATE),指定了存储文件名为indemnity_calculation_kuwait - 读取时你调用的是
getPreferences(MODE_PRIVATE),这个API本质是调用getSharedPreferences(getLocalClassName(), MODE_PRIVATE),默认会以当前Activity的类名作为存储文件名,和你存数据的文件完全不是同一个,所以只能读到默认值0
修复方案
把第二个闪屏Activity里的SharedPreferences初始化逻辑修改成和存储时一致的指定文件名即可:
把原来的代码:
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
替换为:
SharedPreferences sharedPreferences = getSharedPreferences("indemnity_calculation_kuwait",MODE_PRIVATE);
额外优化建议
- 存储数据时不需要同时调用
apply()和commit(),二者选其一即可:commit()是同步写入,有返回值可以判断写入结果;apply()是异步写入,没有返回值,不会阻塞主线程,你的场景选其中一个调用就足够 - 建议把SharedPreferences的文件名、存储的key名统一封装成常量,避免后续不同页面调用时拼写错误出现类似问题
内容的提问来源于stack exchange,提问作者mh7
相关产品推荐
相关产品推荐

