我正在创建一个应用程序,用户一直按下按钮以获取应用内金钱,我的问题是当应用程序关闭或暂停时,当我将应用程序的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"硬币再次从头开始!
请帮助我好几个小时,因为我想知道发生了什么,我无法解释代码有什么问题?此外,我尝试了许多其他保存代码,他们都崩溃的应用程序,这是唯一似乎与我合作的保存代码,任何帮助将非常感谢!谢谢!
答案 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();
}