如何在 android java 中实现每日连胜计数器?

How to implement a daily streak counter in android java?

我想为用户实施每日连胜计数器。 如果用户 return 第二天使用该应用,则连续计数应增加 1,如果用户未 return 使用该应用,则连续计数应再次 return 至 1接下来的连续一天。

到目前为止,我已经尝试使用图像中给定的方法来实现它,但我的每日连续记录总是显示 1。 我认为这是因为它永远不会进入 'else' 部分。

你们能帮我解决这个问题吗thing.Any非常感谢您的帮助。

savedInstanceState 将在应用程序启动时 return 为空,您必须像下面这样检查首次使用的用户。

     if preferences.getInt(STREAKS) == null{ 
    
    }else {}

如果用户是第一次登录

  • 初始化上次登录日期并重置连续记录

其他

  • 如果用户在同一天登录 什么都不做
  • 如果用户连续几天登录 增加连胜并更新上次登录日期
  • 如果上次登录日期超过一天 重置连胜和上次登录日期

下面是伪实现

class ConsecutiveDayChecker {

    /**
     * Call this method when user login
     */
    public void onUserLogin() {
        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        Date date = new Date();
        String today = dateFormat.format(date);
        String lastLoginDay = getLastLoginDate();

        String yesterday = getYesterdayDate(dateFormat, date);

        if (lastLoginDay == null) {
            // user logged in for the first time
            updateLastLoginDate(today);
            incrementDays();
        } else {
            if (lastLoginDay.equals(today)) {
                // User logged in the same day , do nothing
            } else if (lastLoginDay.equals(yesterday)) {
                // User logged in consecutive days , add 1
                updateLastLoginDate(today);
                incrementDays();
            } else {
                // It's been more than a day user logged in, reset the counter to 1
                updateLastLoginDate(today);
                resetDays();
            }
        }
    }

    private String getYesterdayDate(DateFormat simpleDateFormat, Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, -1);
        return simpleDateFormat.format(calendar.getTime());
    }

    /**
     * Update last login date into the storage
     * @param date
     */
    private void updateLastLoginDate(String date) {
        // SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        // SharedPreferences.Editor editor = sharedPref.edit();
        // editor.putString("last_login_day", date);
        // editor.apply();
    }

    /**
     * Get last login date 
     * @return
     */
    private String getLastLoginDate() {
        // String lastLogin = null;
        // SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        // lastLogin = sharedPref.getString("last_login_day", null);
        // return lastLogin;
    }

    private int getConsecutiveDays() {
        // int days = 0;
        // SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        // days = sharedPref.getInt("num_consecutive_days", 0);
        // return days;
    }

    private void incrementDays() {
        // int days = getConsecutiveDays() + 1;
        // SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        // SharedPreferences.Editor editor = sharedPref.edit();
        // editor.putInt("num_consecutive_days", days);
        // editor.apply();
    }

    private void resetDays() {
        // int days = 1;
        // SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        // SharedPreferences.Editor editor = sharedPref.edit();
        // editor.putInt("num_consecutive_days", days);
        // editor.apply();
    }

    public int getStreak() {
        return getConsecutiveDays();
    }
}

我用这个得到了我想要的东西:

if(getSharedPreferences(SHARED_PREF_TIME, MODE_PRIVATE).getInt(STREAKS,0)==0){

} 否则{

}