我在加载共享偏好时遇到问题。这是我的第一个没有先前编码经验的应用程序。该应用程序允许用户计算他们的"饮料"和#34;镜头"。
按钮通过" 1"增加其相应的textView。当我关闭应用程序并打开它时,数字保持不变,按钮不断增加值#1;"。
问题是当应用程序被销毁并打开时。 textView将显示剩下的数字,但是当我按下一个按钮时,它们会重新回到1.所以,正在加载正确的数字,但按钮正在放置这些数字。
我希望这很清楚。如果我需要更好地解释,请告诉我。我通常能够通过大量的互联网搜索找出所有问题。我终于撞上了墙。
private Button clearButton;
private Button drinkButton;
private Button shotButton;
private TextView textDrink;
private TextView textShot;
private int counterDrink = 0;
private int counterShot = 0;
public static final String DRINK_DATA = "DrinkData";
public static final String DEFAULT = "0";
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
loadSavedPreferences();
}
...
private void loadSavedPreferences(){
prefs = getSharedPreferences(DRINK_DATA, MODE_PRIVATE);
String dataDrinkReturned = prefs.getString("DrinkData", DEFAULT);
String dataShotReturned = prefs.getString("ShotData", DEFAULT);
textDrink.setText(dataDrinkReturned);
textShot.setText(dataShotReturned); }
'
@Override
protected void onPause(){
super.onPause();
prefs = getSharedPreferences(DRINK_DATA, MODE_PRIVATE);
String shotData = textShot.getText().toString();
String drinkData = textDrink.getText().toString();
SharedPreferences.Editor editor = prefs.edit();
editor.putString("DrinkData", drinkData);
editor.putString("ShotData", shotData);
editor.commit();
}
`
答案 0 :(得分:1)
您忘记初始化int-counters:
private void loadSavedPreferences(){
prefs = getSharedPreferences(DRINK_DATA, MODE_PRIVATE);
String dataDrinkReturned = prefs.getString("DrinkData", DEFAULT);
String dataShotReturned = prefs.getString("ShotData", DEFAULT);
counterDrink = Integer.parseInt(dataDrinkReturned);
counterShot = Integer.parseInt(dataShotReturned );
textDrink.setText(dataDrinkReturned);
textShot.setText(dataShotReturned);
}
虽然我觉得在共享首选项中保存int值比使用字符串值更好。
private void loadSavedPreferences(){
prefs = getSharedPreferences(DRINK_DATA, MODE_PRIVATE);
counterDrink = prefs.getInt("DrinkData", 0);
counterShot = prefs.getInt("ShotData", 0);
textDrink.setText(""+counterDrink);
textShot.setText(""+counterShot);
}
@Override
protected void onPause(){
super.onPause();
prefs = getSharedPreferences(DRINK_DATA, MODE_PRIVATE);
editor.putInt("DrinkData", counterDrink );
editor.putInt("ShotData", counterShot );
editor.commit();
}
答案 1 :(得分:1)
这是因为您没有将计数器变量(counterDrink
和counterShot
)设置为正确的数量,并且在重新启动活动时始终会重置。
我建议将计数器保存为SharedPreferences
,而不是将计数器保存为String
,而是将TextView
设置为正确的数量,您还需要设置counterDrink
和counterShot
。