java - SharedPreferences保存时成功,但是为什么读取时失败?
PHP中文网
PHP中文网 2017-04-17 16:23:02
[Java讨论组]
//---用于保存text到SharedPreferences中
private void saveProgressText() {
    sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
    
    sharedPreferences.edit().putString("Text", "选取的内容");
    boolean commit = sharedPreferences.edit().commit();
    LogUtils.d(commit+"");//--->这里输出成功
    LogUtils.d("保存的是"+sharedPreferences.getString("Text", "默认值"));//--->>这里输出"默认值"
}

    //....用于初始化时,把保存到SharedPreferences中的文本内容,设置到EditText上
private void initPrgress() {
    sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
    String saveText = sharedPreferences.getString("Text", "这是默认值");
    LogUtils.d("saveText:"+saveText);//----->>>这里输出"这是默认值"
    if (saveText != null) {
        eText.setText(saveText);
    } else {
    }
}

第一种情况下

  • 当我调用saveProgressText()方法保存字符串的时候,正常情况下,应该把"选取的内容"保存到SharedPreferences中,并且输出true,以及保存的是选取的内容

  • 但是最终输出的时候true,以及默认值

第二种情况下

  • 当Activity被加载的时候,调用initPrgress()方法,正常情况下,应该把我之前保存到SharedPreferences中的内容保存的内容这五个字读取出来,在logcat输出保存的内容这五个字,并设置到EditText上.

  • 但是最终输出的时候,却是输出的是这是默认值,并且在EditText显示的也是这是默认值

已解决

@li21 多谢了

sharedPreferences.edit().putString("wtestText", "选取的内容").commit();

直接提交即可

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
伊谢尔伦

关于 edit() 这个方法,每次调用 SharedPreferences.edit() 都会返回一个新的实例。
你用1个实例保存数据。然后用另外1个实例commit,可是这第2个实例,并不包含第1个实例的数据呀。
正确的做法:edit().putString("Text", "选取的内容").commit();

SharedPreferences.Editor SharedPreferences.edit()
Returns a new instance of the SharedPreferences.Editor interface, 
ringa_lee

@wangwox, 楼上正解

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号