退出时无法让应用保存变量

时间:2018-01-28 16:51:06

标签: java android sharedpreferences

我正在创建一个应用程序,用户一直按下按钮以获取应用内金钱,我的问题是当应用程序关闭或暂停时,当我将应用程序的Money计数器重置为零时暂停。因此,我尝试制作共享首选项代码,以便在应用程序暂停或停止时保存我的变量,但是当我恢复应用程序时,计数器不会重置为零,但只要我点击按钮产生资金就会重置归零?任何帮助将不胜感激。

按下按钮时执行的代码:

    myBalance += 1;
    TextView balanceShow = findViewById(R.id.balanceShow);
    balanceShow.setText("Balance: " + myBalance + "Coin");

这是在应用程序退出事件上执行的代码(保存用户余额的代码):

    TextView balanceShow = findViewById(R.id.balanceShow);
    String balance = balanceShow.getText().toString();
    SharedPreferences data = getSharedPreferences("MySavedData", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = data.edit();
    editor.putString("BALANCE", balance);
    editor.commit();
    Toast.makeText(this, "Saved!", Toast.LENGTH_SHORT).show();

最后这是在应用程序的简历上执行的代码,当他回来时加载用户的余额:

    TextView balanceShow = findViewById(R.id.balanceShow);
    SharedPreferences data = getSharedPreferences("MySavedData", Context.MODE_PRIVATE);
    String balance = data.getString("BALANCE", "No Data Found!");
    balanceShow.setText(balance);
    Toast.makeText(this, "Loaded!", Toast.LENGTH_SHORT).show();

为了使事情更清楚:

1-该应用程序以" 0"开头硬币平衡。

2-我点击按钮,生成" 1"每按一次硬币就触发我发布的第一个代码。

3-让我们说我做了#34; 80"硬币。

4-现在关闭应用程序。

5-我打开应用程序,我发现我的余额是" 80"硬币。太好了!

6-我按下按钮,然后天平重置为" 0"硬币再次从头开始!

请帮助我好几个小时,因为我想知道发生了什么,我无法解释代码有什么问题?此外,我尝试了许多其他保存代码,他们都崩溃的应用程序,这是唯一似乎与我合作的保存代码,任何帮助将非常感谢!谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个

private void saveCoins(Context context, String coin) {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPreferences.Editor spe = sp.edit();
        spe.putString(context.getString(R.string.pref_coin), coin);
        spe.apply();
    }

检索硬币

private String getPaymentSelected(Context c) {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(c);
        return sp.getString(c.getString(R.string.pref_coin), "0");
    }

在strings.xml(里面的值文件夹)中创建一个字符串变量pref_coin

答案 1 :(得分:0)

    TextView balanceShow = findViewById(R.id.balanceShow);
    SharedPreferences data = getSharedPreferences("MySavedData", Context.MODE_PRIVATE);
    String balance = data.getString("BALANCE", "No Data Found!");
    balanceShow.setText(balance);
    Toast.makeText(this, "Loaded!", Toast.LENGTH_SHORT).show();

这就是你的问题所在。您只更新TextField的值,而TextField(此处为myBalance)后面的计数器值为零。您应该将myBalance计数器中的整数数据存储到首选项中,并在恢复应用程序时加载该数据,而不是将存储在TextField中的数据保存到SharedPreferences中。

简而言之,为了省钱:

private void saveCoinsToPreferences() {
    SharedPreferences data = getSharedPreferences("MySavedData", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = data.edit();
    editor.putInt("BALANCE", myBalance);
    editor.commit();
    Toast.makeText(this, "Saved!", Toast.LENGTH_SHORT).show();
}

为了取回硬币:

private int retrieveCoins() {
    TextView balanceShow = findViewById(R.id.balanceShow);
    SharedPreferences data = getSharedPreferences("MySavedData", Context.MODE_PRIVATE);
    myBalance = data.getInt("BALANCE", -1);
    balanceShow.setText("Balance: " + myBalance + "Coin");
    Toast.makeText(this, "Loaded!", Toast.LENGTH_SHORT).show();
}