首页 > 解决方案 > 使用 SharedPrefernces 对 RecyclerView 中的整数求和

问题描述

我正在尝试创建一个汇总时间的应用程序。我的情况:我有一个包含很多元素的 RecyclerView,每个元素都有不同的time属性。

现在,当单击一个元素时,我希望将所有这些属性相加,并将最终结果显示在另一个活动中。所以我想要做的是使用 SharedPrefernces 来实现这一点,如下所示:

private void getTime(int time) {
        SharedPreferences sharedPreferences = mContext.getSharedPreferences("sharedPrefs", MODE_PRIVATE);
        int time0 = sharedPreferences.getInt("TimeRetrieve", 0);

        int sum = time0 + time;




        SharedPreferences sharedPreferences2 = mContext.getSharedPreferences("sharedPrefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences2.edit();
        editor.putInt("Time", sum);

        editor.apply();

TimeRetrieve获取在 TextView 中显示的总时间,所以如果这是第一次,它当然默认为 0。之后,它应该将检索到的 int 与刚刚单击的 Item 的 int 相加,然后保存在另一个 SharedPref:Time中。

Time被发送到 TextView,在那里它被检索TimeRetrieve

但是他的不行。。

标签: javaandroidsumsharedpreferences

解决方案


您是否有理由使用两种不同SharedPreferences的方式来获取和放置数据?考虑使用这样的东西:

private void GetTime(int time) {
        SharedPreferences sharedPreferences = mContext.getDefaultSharedPreferences("sharedPrefs", MODE_PRIVATE);
        int time0 = sharedPreferences.getInt("TimeRetrieve", 0);

        int sum = time0 + time;





        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("TimeRetrieve", sum);

        editor.apply();

注意对 的调用getDefaultSharedPreferences。这将获得默认的com.companyname.package.yourapplicationSharedPreferences 文件,如果您想从中设置和检索数据,您应该只使用该文件。您会创建多个 SharedPreferences 文件还有其他原因,但我认为这不是您想要做的。您还使用了两个不同的密钥,这也绝对是问题的一部分。我在上面的代码中更改了它们,以便它们匹配并且您两次都引用相同的键。


推荐阅读