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 你看下
大约一年之前 回复
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
上传中...
上传图片
插入图片