編集: OKこのコードは、多かれ少なかれ私が変更しようとしていたブール値をリセットする行に残っていたことが判明しました。しかし、皆さん、助けをありがとう。アレイで共有環境設定を使用する
アプリの起動時に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