编辑: 确定事实证明,这段代码工作(或多或少)我留在一行重置我想改变的布尔值。谢谢大家的帮助。在阵列中使用共享首选项
在我的应用程序启动时无法使用SharedPreferences
读取保存的数组数据。 我的_dPad
布尔和我的_FreePlay
整数加载,保存和传递我和我的_renderer
没有任何问题。
麻烦的开始,当我尝试使用某些阵列 easteregg[]
只有2项现在这样很明显,我可能只是刚刚把他们变成独立的变量,但我要补充更长的长度更阿拉斯所以这使得一个方便的测试示例。
我上显示的内容发生代码指出(在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
我必须将数组转换为字符串吗?我不知道如何改变它们。
如果不另外声明,则布尔值默认为“false”。你确定你在某个时候改变了价值吗?尝试打印日志语句,然后再保存它并检索它之后。 –
好吧,尽管我有“_renderer.easteregg [1] = true;我知道它在代码中的其他地方没有改变,因为如果我改变“public boolean [] easteregg = new boolean [2];”到“public boolean easteregg []; = {true,true}”,那么值肯定会变为true。 – MarbleMad