Android应用程序 - sharedpreferences无法正确加载

时间:2014-10-29 19:01:49

标签: java android sharedpreferences

我在加载共享偏好时遇到问题。这是我的第一个没有先前编码经验的应用程序。该应用程序允许用户计算他们的"饮料"和#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();
}

`

2 个答案:

答案 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)

这是因为您没有将计数器变量(counterDrinkcounterShot)设置为正确的数量,并且在重新启动活动时始终会重置。

我建议将计数器保存为SharedPreferences,而不是将计数器保存为String,而是将TextView设置为正确的数量,您还需要设置counterDrinkcounterShot