地狱我正在尝试为我的项目制作高分,但我的代码只保存最后一个值而不是最高值 我怎样才能存储最高价值?这是我的代码。
这是保存过程 - >
SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
TextView outputView = (TextView)findViewById(R.id.textscore);
CharSequence textData = outputView.getText();
if (textData != null) {
editor.putString(TEXT_DATA_KEY, textData.toString());
editor.commit();
}
这是阅读过程
SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
String textData = prefs.getString(TEXT_DATA_KEY, "No Preferences!");
TextView outputView = (TextView) findViewById(R.id.textread);
答案 0 :(得分:2)
你需要检查以前保存的值,看看哪个最高,你只保存最新值,而不是最高值
E.g。
if (textData != null) {
int score = Integer.parseInt(textData.toString());
if(score > prefs.getInt(TEXT_DATA_KEY, 0)) // Or get String, with parse Int.
{
//editor.putString(TEXT_DATA_KEY, textData.toString()); // Should be saved as int
editor.putInt(TEXT_DATA_KEY, score);
editor.commit();
}
}
答案 1 :(得分:1)
仅当共享首选项中的现有值小于新值时,才需要存储新值。
您似乎没有在代码中检查此值
答案 2 :(得分:1)
替换
if (textData != null) {
editor.putString(TEXT_DATA_KEY, textData.toString());
editor.commit();
}
带
if (textData != null) {
if(Integer.parseInt(prefs.getString(TEXT_DATA_KEY, "0")) < Integer.parseInt(outputView.getText())) {
editor.putString(TEXT_DATA_KEY, textData.toString());
editor.commit();
}
}
答案 3 :(得分:0)
首先,为什么要将高分保存为字符串,使用int或float(如果必须)。
最简单的方法是在保存前读取高分并与您尝试保存的分数进行比较。
答案 4 :(得分:0)
您需要跟踪游戏中的高分。使用数字而不是使用文本视图的字符串最容易完成:
int hiScore = 0;
在您的创业公司中,也许在onCreate()中,您需要获得之前的高分:
SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
try {
hiScore = prefs.getInt(HI_SCORE, 0);
} catch (NumberFormatException e) {
hiScore = 0;
}
当获得新分数时,如果它高于之前的高分,您将要记录它:
if (newScore > hiScore) {
hiScore = newScore;
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(HI_SCORE, hiScore);
editor.commit();
}