【问题标题】:Having problems saving boolean and int to sharedPrefs将 boolean 和 int 保存到 sharedPrefs 时遇到问题
【发布时间】:2011-05-23 21:57:34
【问题描述】:

我正在尝试为我的 Android 刽子手游戏创建一个残局活动,但我在提交字符串以外的值时遇到了一些问题。

这是我的主要活动:

package com.assignment.hangman;
import android.app.Activity;


public class HangmanActivity extends Activity {
    public static final String GAME_PREFERENCES = "Game Preferences";
    public static final String GAME_LOGIC = "Game Logic";
    public static final String GAME_LOGIC_GUESS = "Guessed letter";
    public static final String GAME_LOGIC_SCORE_STRING = "Unknow score";
    public static final boolean GAME_LOGIC_WIN_LOOSE = false;
}

我得到这样的共享首选项:

mGameSettings = getSharedPreferences("GAME_PREFERENCES", Context.MODE_PRIVATE);

这就是将更改提交到编辑器时出现问题的地方:

public void finishGame() {
        //Commit different game variables so they can be used in the end game activity  
        Editor editor = mGameSettings.edit();
        editor.putString(GAME_LOGIC_SCORE_STRING, (tries + " of " + numberOfLives + " used"));
        if (tries != numberOfLives){
            editor.putBoolean("GAME_LOGIC_WIN_LOOSE", true);
        }
        editor.commit();
        // Launch end game Activity
        startActivity(new Intent(HangmanGameActivity.this, HangmanEndActivity.class));
    }

在更改活动后,我重新获取如下值:

        if (mGameSettings.contains("GAME_LOGIC_WIN_LOOSE")) {
        Log.i(GAME_DEBUG, "Succes");
        boolean winLoose = mGameSettings.getBoolean("GAME_LOGIC_WIN_LOOSE", false);
        if (winLoose) {
            winLooseView.setText(R.string.you_win);
        } else {
            winLooseView.setText(R.string.you_loose);
    }
    }

但不知何故,只有字符串被正确提交。我猜布尔值会恢复为默认值 false。

有人可以帮我解释一下吗?

【问题讨论】:

    标签: android boolean int save sharedpreferences


    【解决方案1】:

    如果您只想将数据从一个活动移动到另一个活动,我会将其附加到 Intent。 将其写入共享内存意味着访问手机存储,这真的很慢。

    你可以这样做:

    Intent intent = new Intent(HangmanGameActivity.this, HangmanEndActivity.class);
    intent.putExtra(GAME_LOGIC_SCORE_STRING, tries + " of " + numberOfLives + " used"):
    intent.putExtra("GAME_LOGIC_WIN_LOOSE", true);  
    startActivity(intent);
    

    在 EndActivity 中你会这样做:

    Intent intent = getIntent();
    String gameString = intent.getStringExtra(GAME_LOGIC_SCORE_STRING, "default value");
    boolean win = intent.getBooleanExtra(GAME_LOGIC_WIN_LOOSE, false);
    

    【讨论】:

    • 哇,这很容易。非常感谢您的快速回复。
    猜你喜欢
    • 2014-06-06
    • 2020-07-29
    • 2021-12-31
    • 2014-04-19
    • 2014-02-28
    • 2020-02-16
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多