我正在尝试实现一项功能,该功能可以检测用户是否连续2天,3天,4天....我正在考虑如何运作,但我正在努力,因此我需要帮助。
最初,我考虑过获取日期,将其添加到数组中,然后检查数组的最后几个条目是否连续。例如[28,29,30]。这将返回一条有价值的消息,表示用户已连续3天访问该应用。这个问题是我重叠并进入新的一个月。例如[38,29,30,1]。我的解决方案将不再有效。
我正在寻找解决这个问题的解决方案。
提前致谢。
答案 0 :(得分:3)
为什么不存储计数器 - 目前程序开启的天数和上次开放的日期?
例如: 在开始计数器= 0;您将其增加1并将当前日期保存为“上次启动日期”。
在下一个开头,您只需将当前日期与存储日期进行比较。 如果它们是相同的,你不需要做任何事情(应用程序在一天内打开两次),如果差异是1天,你只需增加计数器并存储新的日期,假设应用程序被打开'柜台'天已经+今天了。如果差异超过一个,则意味着用户已跳过至少一天,因此您只需要再次使计数器= 1(当前启动应用程序)并存储当前日期(开始全新的周期)。
答案 1 :(得分:1)
只保存当前的一年中我共享的偏好和连续打开应用程序的天数,并在下次运行中比较保存的日期,如果共享首选项中保存的天数比当前一年的增量计数器少1并保存偏好中的新日期和计数器
只需使用此
SharedPreferences sharedPreferences = getSharedPreferences("YOUR PREF KEY", Context.MODE_PRIVATE);
Calendar c = Calendar.getInstance();
int thisDay = c.get(Calendar.DAY_OF_YEAR); // GET THE CURRENT DAY OF THE YEAR
int lastDay = sharedPreferences.getInt("YOUR DATE PREF KEY", 0); //If we don't have a saved value, use 0.
int counterOfConsecutiveDays = sharedPreferences.getInt("YOUR COUNTER PREF KEY", 0); //If we don't have a saved value, use 0.
if(lastDay == thisDay -1){
// CONSECUTIVE DAYS
counterOfConsecutiveDays = counterOfConsecutiveDays + 1;
sharedPreferences.edit.putInt("YOUR DATE PREF KEY", thisDay);
sharedPreferences.edit.putInt("YOUR COUNTER PREF KEY", counterOfConsecutiveDays).commit;
} else {
sharedPreferences.edit.putInt("YOUR DATE PREF KEY", thisDay);
sharedPreferences.edit.putInt("YOUR COUNTER PREF KEY", 1).commit();
}