如何保存在SharedPreferences中添加的十进制数?

时间:2018-04-07 15:02:10

标签: java android

我处理整数(1,2,3,4 ......)的时间我能够使用java中的以下代码保存分数:

pointsAmount = pointsAmount +10;
    pointsAvailable.setText("C."+pointsAmount);
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    saveCoins.edit().putInt("C.",pointsAmount).commit();

我可以添加10分,然后将它们加起来并保存在已保存的偏好设置中,即使我再次关闭并打开应用程序,我的积分也始终存在于此代码中。

现在我希望pointsAmount是十进制数+0.05。使用与上面相同的代码是不允许的,它给了我错误。所以我使用以下代码来保存带十进制数的硬币。现在错误是,当我关闭并再次重新打开应用程序时,我的硬币消失了:

pointsAmount = (pointsAmount +0.05);
    pointsAmount .setText("C."+pointsAmount );
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    saveCoins.edit().putInt("C.",(int)pointsAmount).apply();
    SharedPreferences.Editor editor= saveCoins.edit();
    editor.putString("mySaverCoins", "mySaverCoins");
    editor.commit();

我想在关闭它后唤醒应用程序时保存我的硬币。我的代码有什么问题?

1 个答案:

答案 0 :(得分:1)

当您保存硬币时,您将应该是浮点数转换为整数。执行此操作时,Java只会截断数字,这意味着小数点后的任何内容都将丢失。您重新启动应用时看到硬币被“擦除”的原因是,在您获得1枚硬币之前,保存到pointsAmount时,SharedPreferences变量会被截断为0。解决此问题的最简单方法是直接存储和恢复浮点数:

pointsAmount = pointsAmount + 0.05;
pointsAmount.setText("C." + pointsAmount );
SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
saveCoins.edit().putFloat("C.", pointsAmount).apply();

要恢复:

SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
pointsAmount = saveCoins.getFloat("C.", 0);