我正在尝试创建一个可以汇总时间的应用程序。
我的情况:
我有一个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
但是他不起作用。
答案 0 :(得分:2)
您是否有理由使用两个不同的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.yourapplication
SharedPreferences文件,如果您要设置文件并从中检索数据,则应仅使用该文件。还有其他原因会创建多个SharedPreferences文件,但是我认为这不是您要尝试的方法。您还使用了两个不同的键,这肯定也是问题的一部分。我在上面的代码中更改了它们,以便它们匹配,并且您两次都引用相同的键。
答案 1 :(得分:2)
首先,您使用2个不同的键:TimeRetrieve
和Time
。所以,你不能求和。
其次,为什么要使用2 SharedPreferences
对象?只需要一个。
第三,您无需在此处使用SharedPreferences
。您只需要对变量中想要的值求和,然后将其传递给具有额外捆绑包的另一个Activity。