android - 对数组使用共享首选项

标签 android arrays string sharedpreferences

编辑: 好的 事实证明这段代码是有效的(或多或少)我留在了一行重置我试图改变的 bool 值。感谢大家的帮助。

在我的应用程序启动时使用 SharedPreferences 读取保存的数组数据时遇到问题。 我的 _dPad bool 值和我的 _FreePlay 整数加载、保存和传递到我的 _renderer 没有任何问题。

当我尝试使用一些数组时,问题就来了 easteregg[] 现在只有 2 个条目,所以显然我可以将它们变成单独的变量,但我希望添加更多长度更长的 arras,这样就形成了一个方便的测试示例。

我已经在代码中注意到似乎发生了什么(easteregg[] 设置似乎没有改变)

读取数据:

    // Read saved preferences    
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

    _renderer._dPad = prefs.getBoolean("_dPad", false);                // * works ok *
    _renderer._FreePlay = prefs.getInt("_FreePlay", 1);                // * works ok *
    _renderer.easteregg[0] = prefs.getBoolean("easteregg[0]", false ); // * not working
    _renderer.easteregg[1] = true;                        // * even this is not working

    setRenderer(_renderer);

写入数据:

    public void onDetachedFromWindow() {
    super.onDetachedFromWindow();

    // As good a time as any to save current config
    save = false ; // don't commit if nothing changed.

    SharedPreferences prefs =                       
    PreferenceManager.getDefaultSharedPreferences(getContext());
    SharedPreferences.Editor editor = prefs.edit();

    if (_renderer._dPad != prefs.getBoolean("_dPad",false)){ save = true ;
    editor.putBoolean("_dPad", _renderer._dPad);}

    if (_renderer._FreePlay != prefs.getInt("_FreePlay",1)){ save = true ;
    editor.putInt("_FreePlay", _renderer._FreePlay);}

    editor.putBoolean("easteregg[0]", _renderer.easteregg[0]);

    editor.putBoolean("easteregg[1]", _renderer.easteregg[1]);

    if (save == true){editor.commit();}

}

在 .renderer 类中

    // START SAVE DATA
    public boolean _dPad ; // false no Virtual Pad     *Works Fine*
    public int _FreePlay ;  // 1 = no free play        *Works Fine*
    public boolean[] easteregg = new boolean[2];       *Values don't load or save*
    //public boolean easteregg[]; // tried this first  *CAUSES CRASH*
    // END SAVE DATA

我必须将数组转换为字符串吗?我不知道如何更改它们。

最佳答案

我将您的代码放入一个快速 Activity 中,只创建了渲染器类的外壳,就像您在上面所做的那样,发现您的保存 bool 值是假的,因此它永远不会提交首选项。

我强制保存为 true,并尝试了一下,从那里开始一切正常。

我建议在复活节彩蛋上添加支票,就像您对任何其他偏好所做的一样;测试当前值是否与保存的值相同,如果不相同,则设置保存标志。

关于android - 对数组使用共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069410/

相关文章:

android - 如何在Android中获取当前播放的歌曲名称

android - 为 Android 构建 Mailcore2

c - 程序不会终止

c - Memset 和字符

将一系列字符转换为各自的 int

java - 应用程序停止工作 : Could not find class 'android.graphics.drawable.RippleDrawable'

java - Android:SQLite cursor.getPosition() 返回字符串?

python - 将 1 维 numpy 数组克隆到 3 维时出现维序问题

数组中的 C++ CRTP

c++ - 奇怪的 C++ 字符串操作循环错误