【问题标题】:SharedPreferences without values没有值的 SharedPreferences
【发布时间】:2014-08-16 07:12:00
【问题描述】:

这就是我在 SharedPreferences 中保存值的方式:

private void GuardarConfiguracionEnXML() {
        SharedPreferences prefs =getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();

        editor.putBoolean("ConfirmarPromocion", VarGlobales.ConfirmarPromocion);
        editor.putBoolean("NoPermitirCero", VarGlobales.NoPermitirCero);
        editor.putBoolean("ProponerCantidad", VarGlobales.ProponerCantidad);
        editor.putBoolean("ArticuloCodNum", VarGlobales.ArticuloCodNum);
        editor.putBoolean("GuardarRutas", VarGlobales.GuardarRutas);
        editor.putBoolean("IncluyeFabricante", VarGlobales.IncluyeFabricante);
        editor.putBoolean("CompararComienzo", VarGlobales.CompararComienzo);
        editor.putString("CadenaBusquedaArticulos", VarGlobales.CadenaBusquedaArticulos);
        editor.putString("SerieConfiguracion", VarGlobales.SerieConfiguracion);
        editor.putBoolean("MostrarPoblacion", VarGlobales.MostrarPoblacion);
        editor.putBoolean("RecogidaEnvases", VarGlobales.Recogidaenvases);
        editor.putBoolean("ConvertirACajas", VarGlobales.ConvertirACajas);
        editor.putBoolean("RepartoFinSemana", VarGlobales.RepartoFinSemana);
        if(VarGlobales.ModoBusArticulos == BuscarPorArticulo.CODIGO)
            editor.putInt("BusquedaDefectoArticulos", 3);
        else if(VarGlobales.ModoBusArticulos == BuscarPorArticulo.DESCRIPCIONC)
            editor.putInt("BusquedaDefectoArticulos", 1);
        else
            editor.putInt("BusquedaDefectoArticulos", 2);
        editor.putInt("DiasDiurno", VarGlobales.DiasDiurno);
        editor.putInt("DiasNocturno", VarGlobales.DiasNocturno);
        //editor.putBoolean("VentaSoloUnidades", VarGlobales.VentaSoloUnidades);
        editor.commit();

        Map<String, ?> testshared = prefs.getAll();
    }

testshared 具有所有值,但是当我启动我的 apk 时,我得到 0 个值:

SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
        Map<String, ?> testshared2 = prefs.getAll();

testshared2是空的...为什么?

编辑:这是一个 Eclipse 错误,我已经重新启动了我的计算机,现在它可以工作了......谢谢大家。

【问题讨论】:

  • 在 onPause 时是否调用 GuardarConfiguracionEnXML?
  • GuardarConfiguracionEnXML 在 OnClickListener 中被调用。

标签: android xml sharedpreferences


【解决方案1】:

试试这个

改变

SharedPreferences prefs =getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();

到这里

SharedPreferences prefs =getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
Editor editor = prefs.edit();

【讨论】:

  • “prefs 无法解析为类型”,它不起作用。
  • 很抱歉。你所拥有的实际上适用于我的代码。您能否提供更多代码来帮助处理上下文?
【解决方案2】:

您的“put/commit”代码对我来说是正确的。

但是,getAll 存在一些缺陷:

How to iterate through all keys of shared preferences?

我建议您尝试检索单个值(例如使用 getBoolean 或 getString)来确定这是否是问题所在。

【讨论】:

  • 我在调试时使用了 getAll,我只是用它来知道哪些值有我的 sharedpreferences 文件。是一个 Eclipse 错误,我已经重新启动了我的计算机,现在它可以工作了......
  • 我的意思是 getAll 看起来很可疑,我的建议是改用 getBoolean 或 getString。
【解决方案3】:

我根据我的活动使用 sharedPreferences。如果你没有activity或fragment类,你可以使用“getApplicationContext()”,你可以在fragment类中使用“getActivity()”,或者在activity类中使用“this”。

放数据:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Editor prefsEditor = prefs.edit();
refsEditor.putString(Key1, Value1);
refsEditor.putString(Key2, Value2);
prefsEditor.commit();

检索数据:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String str = prefs.getString(Key1, "defValue");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多