2 wihte hat wihte_hat 于 2016.09.19 20:04 提问

存储在sharedPreference文件中的数据在退出应用后丢失 3C

//以下为工具类代码,用于保存设置项,在应用内数据均可正常使用,退出应用再进去后设置项数据全取了默认值,求助问题出在哪里
public class SpUtil {
private static SharedPreferences sp;

public static void putBoolean(Context ctx,String key,boolean value){
    if (sp==null){
        sp=ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
    }
    sp.edit().putBoolean(key,value).commit();
}

public static boolean getBoolean(Context ctx,String key,boolean defValue){
    if (sp==null){
        sp=ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
    }
    return sp.getBoolean(key,defValue);
}

public static void putString(Context ctx,String key,String value){
    if (sp==null){
        sp=ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
    }
    sp.edit().putString(key, value).commit();
}

public static String getString(Context ctx,String key,String defValue){
    if (sp==null){
        sp=ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
    }
    return sp.getString(key, defValue);
}

public static void remove(Context ctx, String key) {
    if (sp==null){
        sp=ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
    }
    sp.edit().remove(key).commit();
}

}

4个回答

qq_32015665
qq_32015665   2016.09.19 20:18

这段代码没问题啊,给我看看你调用的那一块吧

wihte_hat
wihte_hat 你看下
接近 2 年之前 回复
wihte_hat
wihte_hat   2016.09.19 20:33

//自动更新设置
public class SettingActivity extends BaseActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setting);

    initUpdate();
}

private void initUpdate() {
    final SettingItemView siv_update= (SettingItemView) findViewById(R.id.siv_update);
    boolean open_update=SpUtil.getBoolean(this, ConstantValue.OPEN_UPDATE,false);
    siv_update.setCheck(open_update);
    siv_update.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean isCheck=siv_update.isCheck();
            siv_update.setCheck(!isCheck);
            SpUtil.putBoolean(getApplicationContext(),ConstantValue.OPEN_UPDATE,!isCheck);
            if (!isCheck){
                Toast.makeText(getApplicationContext(),"自动更新已关闭",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(getApplicationContext(),"自动更新已开启",Toast.LENGTH_SHORT).show();
            }
        }
    });
}

}

Mr_dsw
Mr_dsw   Ds   Rxr 2016.09.19 21:27

public static void putBoolean(Context ctx,String key,boolean value)我猜想应该是你的Context的问题吧!你换成全局的Context试试。
getApplicationContext()

shanfeng3344
shanfeng3344   2017.03.24 11:22

楼主你的问题解决了吗?
我也出现了这种情况。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android退出应用获取本地SharedPreferences存储文件
最近在做HCE云闪付项目过程中,遇到退出应用无法进行闪付交易的问题,查证良久是由于退出APP后,由于SharedPreferences设置模式无法获取本地存储文件导致。只需如下修改即可: public static boolean getScreenValue(Context context, String key) { try { context = c
android中使用SharedPreferences保存数据丢失的问题
当应用第一次启动使用SharedPreferences保存数据之后重启应用会造成保存的数据丢失,但是确实保存过。造成这种现象发生的原因是因为多进程调用了SharedPreferences来保存数据。有些手机可以跨进程使用SharedPreferences,有些则不行。解决办法是在主进程里面使用一个SharedPreferences文件夹,在其他进程里面使用其他的SharedPreferences文
SharedPreferences被清空的问题
默认的PreferenceManager.getDefault(context)在多进程同时读写时,容易被清空 很多程序员为了方便,通常使用默认的sharedPref,事实上,其具有一定的局限性,默认的sharedPref仅支持读写模式为Context.MODE_PRIVATE,无法支持Context.MODE_MULTI_PROCESS,不支持到不重要,坑的是,当安卓程序有多个进程同时读写时,会
使用SharedPreferences保存数据数据取出延迟或丢失的问题
SharedPreferences更改数据后多处读取,数据丢失或延时的问题的原因和解决办法先说一下遇到这个问题的场景,由于我的项目中使用了SharePreference保存一个状态,然后通过获取这个状态来控制后面的逻辑,也就是这个状态是要频繁的去获取的,那势必对这个状态的更改后再重新获取的灵敏度依赖是很高的.然后就出现了这样一个问题,在主进程的某个文件中更改了这个状态后,主进程中可以很实时的获取到(
preference 重启后数据丢失
写了一个用preference实现的菜单,设置,输入等都能保存,再进菜单能看到上次的选项和输入值,但重启后,再进入菜单,所有选项和输入值都回到默认了。 原因: 这个Activity是在Settings里的,由于需要调用phone类的自定义函数,做了如下调用: mPhone = PhoneFactory.getDefaultPhone(); mPhone.MyFunc(xxx,yyy...)
关于Android退出程序清除sharedPreference
退出程序个人认为也没什么必要,其实都是产品闲的蛋疼没事干弄的一些没用的功能。很多产品根本不需要这个功能。不过既然用到了,感觉还是得简单的说一下。 这里网上搜了很多,双击退出的,感觉基本没用,只是在你程序运行的首页,也就是你app的主操作界面有点用途。在你主操作界面的时候双击退出你的程序,其实也不是什么退出,只是返回桌面了。 还有一种是点击退出登录,直接将你的app的activity全部fini
Android SharedPreference 数据写入不成功可能的原因
m_iSharedPre = getSharedPreferences("MyTest", MODE_PRIVATE); 如果用以下方式写入数据: m_iSharedPre.edit().putInt("aa", 100); m_iSharedPre.edit().commit(); 那么当获取数据的时候 m_iSharedPre.getInt("aa", 0); 永远返回默认值
Android 存储学习之使用SharedPreference保存文件
上两节我们都是使用文本文件保存用户的信息,这明显是存在漏洞的。同时对文件中的内容不好管理。今天我们学习用SharedPreference保存。sharedPreference是专门保存一些比较零散的数据的。 我们还是用上节的例子分析,将用户的信息使用SharedPreference来保存。 注意:如果不知道是什么例子,请看Android 存储学习之在内部存储中读写文件 当点击确定按钮后,就会
Android SharedPreferences 文件在卸载和覆盖安装的区别
卸载时,应用的SharedPreferences文件会被删除,而当覆盖安装时,则会被保留。因此,想要对不同版本区分,可以尝试key+version的方式。
使用SharedPreferences即时存储之后,不能即时获取到数据
使用SharedPreferences即时存储之后,不能即时获取到数据?为什么。。。