Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 高分数据持久性?_Java_Android_Data Persistence - Fatal编程技术网

Java 高分数据持久性?

Java 高分数据持久性?,java,android,data-persistence,Java,Android,Data Persistence,我正在努力为我的比赛保留一个高分。我有一个主屏幕活动、一个游戏屏幕活动和一个重定向屏幕活动(当玩家输了的时候)。以下是玩家死亡时运行的gamescreen活动的方法: public void goToRedirectScreen() { //getting preferences SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE); int highSco

我正在努力为我的比赛保留一个高分。我有一个主屏幕活动、一个游戏屏幕活动和一个重定向屏幕活动(当玩家输了的时候)。以下是玩家死亡时运行的gamescreen活动的方法:

public void goToRedirectScreen()
{
    //getting preferences
    SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
    int highScore = prefs.getInt("highScore", 0); //0 is the default value

    rectBlack1.setFixedColor(0xFFFF0015);
    rectBlack2.setFixedColor(0xFFFF0015);
    rectBlack3.setFixedColor(0xFFFF0015);
    rectWhite1.setFixedColor(0xFFFF0015);
    rectWhite2.setFixedColor(0xFFFF0015);
    rectWhite3.setFixedColor(0xFFFF0015);

    //Sound when player dies
    MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.deathsound);
    mediaPlayer.start();

    Intent intent = new Intent(this, Redirect.class);

    if (mScoreboard.getScore() > highScore){
        mScoreboard.setHighScore(mScoreboard.getScore());
    }

    intent.putExtra("score", mScoreboard.getScore() + "");
    intent.putExtra("highScore", mScoreboard.getHighScore() + "");
    startActivity(intent);
}
下面是我的一些代码,用于接收目标的重定向屏幕:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_redirect);

    Intent intent = getIntent();
    mScore = intent.getStringExtra("score");
    mHighScore = intent.getStringExtra("highScore");

    //**********setting preferences************
    SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("highScore", Integer.parseInt(mHighScore));
    editor.commit();

    ButterKnife.inject(this);

    scoreTextView.setText(mScore);
    highScoreTextView.setText(mHighScore);


    playAgainButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playAgain();

        }
    });

    mainMenuButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            goToMainMenu();
        }
    });



}
为了做到这一点,我引用了do this,但现在我不知道我做错了什么,因为highscore和score textview总是相同的,无论我在测试游戏时得到什么分数,即使它高于我以前的分数

以下是我的记分板课程,以防有用:

public class Scoreboard {
private int mScore = 0;
private int mHighScore = 0;

public void addPoint() {
    mScore += 1;
}

public int getHighScore() {
    return mHighScore;
}

public void setHighScore(int highScore) {
    mHighScore = highScore;
}

public int getScore() {
    return mScore;
}

public void setScore(int score) {
    mScore = score;
}

}

加载后,将加载的值设置为高分:

int highScore = prefs.getInt("highScore", 0); //0 is the default value
mScoreboard.setHighScore(highScore);

否则,如果新的分数不是新的高分,则您永远不会实际使用加载的值,因此现有的高分不会传递到重定向屏幕。

使用共享preferences@Apurva我知道,不是吗?我知道你可以用共享参考资料,但我强烈建议使用Sugar ORM——它很容易配置和使用。有了它,你可以做所有需要的持久性,而不仅仅是高分。你永远不会把从pref加载的高分分配到记分板上。