我正在使用Android Studio进行游戏,重新加载应用程序时未保存用于高分的我的SharedPreferences。在应用程序中,它工作正常,但重新启动会将高分重新发送回默认值(0)。
在MainActivity中设置我的SharedPreferences:
SharedPreferences settings = getSharedPreferences("GAME_DATA", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if(currentTopic == 4){
if(settings.getInt("HIGHSCORE", 0) < Math.round(scoreTotal)){
editor.clear();
editor.putInt("HIGHSCORE", Math.round(scoreTotal));
editor.apply();
editor.commit();
}
Intent homeIntent = new Intent(MainActivity.this, HomeActivity.class);
homeIntent.putExtra("Score", Integer.toString(Math.round(scoreTotal)));
startActivity(homeIntent);
editor.commit();
finish();
为了澄清,该代码确实将其放入if语句中。 “ scoreTotal”是我要保存的最高分。
在HomeActivity中获取我的SharedPreferences:
SharedPreferences settings = getSharedPreferences("GAME_DATA", Context.MODE_PRIVATE);
int highscore = settings.getInt("HIGHSCORE", 0);
Log.i("highscore", String.valueOf(highscore));
TextView tv_highscore = findViewById(R.id.tv_highscore);
tv_highscore.setText("Highscore: "+String.valueOf(highscore));
我哪里出问题了?
如果我忘记包含某些内容,请告诉我。我已经从以前的StackOverflow帖子中尝试了很多东西,但是没有用。提前致谢。
编辑:澄清一下,我的问题来自无法在该活动中执行SharedPreferences,然后从另一个活动中获取它们。我使用了额外的意图消息,并在HomeActivity中完成了所有SharedPreferences并成功了。希望这可以帮助一些人。
最佳答案
尝试以下方法:
SharedPreferences settings = getSharedPreferences("GAME_DATA", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
long score = Math.round(scoreTotal);
if(currentTopic == 4){
if(settings.getInt("HIGHSCORE", 0) < score){
editor.putInt("HIGHSCORE", score);
editor.apply();
}
Intent homeIntent = new Intent(MainActivity.this, HomeActivity.class);
homeIntent.putExtra("Score", Integer.toString(score));
startActivity(homeIntent);
finish();
我怀疑您不需要(甚至是真的想要)呼叫
editor.clear();
,因为这会(根据Google文档)在编辑器中标记以从首选项中删除所有值
。
无需调用
apply
,而commit
可以调用:谷歌文档:
与commit()不同,后者将其首选项写出为持久性
同步存储时,apply()会将其更改提交到内存中
立即使用SharedPreferences,但开始异步提交到
磁盘,并且不会收到任何故障通知。如果另一个编辑器在
这个SharedPreferences做一个常规commit(),而apply()是
仍然未完成,commit()将阻塞,直到所有异步提交都
完成以及提交本身。