0

に int を格納したいと考えていSharedPreferencesます。int は、ユーザーがゲームでどのレベルにいるかを表します。ゲームが開始する前に、次のコードが実行されます。

    int level;

    // Restore preferences
    SharedPreferences settings = getSharedPreferences("level_SP", 0);
    level = settings.getInt("currentLevel", 0);
    if(level == 0) {
        level++;
    }
    String str = Integer.toString(level);
    title.setText(str); 

から出力されるテキストtitle.setText(str);1.

テスト目的で、ユーザーがゲームでどのように操作しても、レベルに合格します。ゲーム終了後、このコードが実行されます。

public void levels() {

    // do calculations here to see if user passed level.


    // Restore preferences
    SharedPreferences settings = getSharedPreferences("level_SP", 0);
    int level = settings.getInt("currentLevel", 0);
    int newLevel = level++;

    // We need an Editor object to make preference changes.
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("currentLevel", newLevel);

    // Commit the edits!
    editor.commit();
}

その後、ユーザーがゲームを再度開始すると、レベル 2 になる title.setText(str);はずです。これは、格納した intが増加していないことを示しています。21SharedPreferences

私の質問は、SharedPreferences正しく「取得」していますか? SharedPreferencesはいの場合、正しく「編集」していますか? どちらでもない場合、何が間違っていますか?

編集

考え:0上記のコード全体に散らばっている は何か意味がありますか? それらは別のものであるべきですか?

4

3 に答える 3

3

使用する

editor.putInt("currentLevel", newLevel);

代わりは。

新しいレベルを取得すると、読むときとは異なる好みでそれを書いています。

于 2013-07-29T16:41:53.700 に答える
2

これを変更したいようです

editor.putInt("newLevel", newLevel);

editor.putInt("currentLevel", newLevel);

SharedPreference既存のものを編集するのではなく、新しいものを作成しているため、 currentLevel1から変更されることはありません

于 2013-07-29T16:42:12.243 に答える