java - 如何修复“数据未保存”?
问题描述
我正在制作一个新的问答游戏。我正在尝试用分数解决保存数据的问题。当我打开活动时,分数是可见的,但是当我第二次打开同一个活动时,我失去了分数并且所有数据都返回到 0。我该如何解决它?
我使用 SharedPreferences 来保存数据,因为我不使用数据库服务器。
私人无效Punteggio(){
// TODO: initialization
final int score = getIntent ( ).getIntExtra ( Home.DATA_Score , 0 );
last_score = score;
last_score_Label.setText ( "Ultimo punteggio: " + last_score );
// TODO: Miglior punteggio e ultimo punteggio
SharedPreferences settings = getSharedPreferences ( "GAME_DATA" , MODE_PRIVATE );
highscore = settings.getInt ( "HIGHSCORE" , 0 );
// TODO: Saving highscore
// Last score isn't saved but highscore is saved
if ( score > highscore ) {
highscore_Label.setText ( "Miglior punteggio: " + score );
// Salvataggio
SharedPreferences.Editor editor = settings.edit ( );
editor.putInt ( "HIGHSCORE" , score );
editor.putInt ( "LAST_SCORE", last_score );
editor.apply ( );
} else {
highscore_Label.setText ( "Miglior punteggio: " + highscore );
}
}
// 我想保存 graphicsAvatar 和 formLabel 但它们没有保存
private void showGrafico(){
final int number = getIntent ().getIntExtra ( Home.DATA_Avatar, 0 );
number_avatar = number;
switch (number){
case 1: graphicAvatar.setImageResource ( R.drawable.negative );
formaLabel.setText ( "Stato di forma: Pessimo" );
break;
case 2: graphicAvatar.setImageResource ( R.drawable.normal );
formaLabel.setText ( "Stato di forma: Normale" );
break;
case 3: graphicAvatar.setImageResource ( R.drawable.positive );
formaLabel.setText ( "Staot di forma: Ottimo" );
break;
}
}
// 我希望数据被保存,但它不像我预期的那样......
// 我修改了代码,是这样的,但问题仍然存在:private void showGrafico(){
final int number = getIntent ().getIntExtra ( Home.DATA_Avatar, 0 );
switch (number){
case 1: graphicAvatar.setImageResource ( R.drawable.negative );
formaLabel.setText ( "Stato di forma: Pessimo" );
break;
case 2: graphicAvatar.setImageResource ( R.drawable.normal );
formaLabel.setText ( "Stato di forma: Normale" );
break;
case 3: graphicAvatar.setImageResource ( R.drawable.positive );
formaLabel.setText ( "Staot di forma: Ottimo" );
break;
}
// TODO: Miglior punteggio e ultimo punteggio
SharedPreferences pref = getApplicationContext().getSharedPreferences("DATA_AVATAR", MODE_PRIVATE);
number_avatar = pref.getInt ( "NUMBER" , 0 );
SharedPreferences.Editor editor = pref.edit ( );
editor.putInt ( "NUMBER" , number_avatar );
editor.commit ();
}
// 然后还有: private void showPunteggio ( ) {
// TODO: inizializzazione variabili
final int score = getIntent ( ).getIntExtra ( Home.DATA_Score , 0 );
last_score = score;
last_score_Label.setText ( "Ultimo punteggio: " + last_score );
// TODO: Miglior punteggio e ultimo punteggio
SharedPreferences settings = getApplicationContext().getSharedPreferences("GAME_DATA",0);
highscore = settings.getInt ( "HIGHSCORE" , 0 );
// TODO: Salvataggio Miglior Punteggio
if ( score > highscore ) {
highscore_Label.setText ( "Miglior punteggio: " + score );
// Salvataggio
SharedPreferences.Editor editor = settings.edit ( );
editor.putInt ( "HIGHSCORE" , score );
editor.commit ( );
} else {
highscore_Label.setText ( "Miglior punteggio: " + highscore );
}
}
解决方案
Instead of apply()
can you try calling commit()
?
editor.commit();
Please note that commit()
is a blocking call and should be avoided in UI thread. In case commit()
does not work let me know.
By the way, how you are getting SharedPreferences object is not clear. It should be:
SharedPreferences pref = getApplicationContext().getSharedPreferences("XYZ", MODE_PRIVATE);
推荐阅读
- python - 如何迭代每个列名并将其附加到python中的表或数据框中
- javascript - 将新对象添加到数组中到nodeJS中的js文件中
- node.js - 应用程序崩溃 - 在 nodejs 中启动之前等待文件更改
- windows - Docker for windows:安装到容器后无法删除目录
- ios - 斯坦福 CS193p - 根据卡数更改字体大小?
- ios - 我如何通过其记录名称查询 CloudKit 以获取特定记录?
- python - 如何解决builtins.pyi 中的问题?
- matlab - matlab的corrcoef函数工作错误
- r - 将 data.frame 导出和格式化为 .dat 表
- sanic - Sanic CORS 异常处理程序