Как ограничить событие щелчка, например, 5 раз в день, и после этого отключить его и включить щелчок только на следующий день?

#java #android

#java #Android

Вопрос:

У меня есть вращающееся колесо для призов. Я хочу установить ограничение на количество кликов в день. Например, 5 кликов в день. Я просто хочу, чтобы пользователь нажимал только 5 раз в день и отключал событие щелчка на этот день впоследствии. Щелчки будут повторно включены на следующий день.

  ImageView imageView = findViewById(R.id.imageView11);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
    final SharedPreferences coins = getSharedPreferences("Rewards", MODE_PRIVATE);
    final LuckyWheelView luckyWheelView = (LuckyWheelView) findViewById(R.id.luckyWheel);
    findViewById(R.id.play).setEnabled(true);
    findViewById(R.id.play).setAlpha(1f);

    calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    weekday = calendar.get(Calendar.DAY_OF_WEEK);
    todayString = year   ""   month   ""   day;
    final SharedPreferences spinChecks = getSharedPreferences("SPINCHECK",0);
    final boolean currentDay = spinChecks.getBoolean(todayString, false);
  

Комментарии:

1. Глупым способом было бы сохранить сделанные ими вращения и время последнего вращения в базе данных и проверять его каждый раз, когда они вращаются.

Ответ №1:

Это можно легко сделать с помощью SharedPrefs.

 private void TestDate(String todayString) {
        final SharedPreferences spinChecks = getSharedPreferences("SPINCHECK",0);
        if(spinChecks.getString("date","").equals(todayString)){
            if(spinChecks.getInt("count",0)<5){
                spinChecks.edit().putInt("count",spinChecks.getInt("count",0) 1).apply();
                System.out.println("Allow : date " todayString " count " spinChecks.getInt("count",0));
            }else{
                System.out.println("Do not Allow : date " todayString " count " spinChecks.getInt("count",0));
            }

        }else{
            spinChecks.edit().putString("date",todayString).apply();
            spinChecks.edit().putInt("count",1).apply();
            System.out.println("Allow : date " todayString " count " spinChecks.getInt("count",0));
        }
    }
  

выше приведено лишь приблизительное представление о том, как это сделать.

еще одна вещь, которую вы можете сделать, это сохранить всю историю в Sqlite и запросить базу данных для подсчета записей за этот конкретный день.
Конечно, это займет некоторое место, но вы можете показать историю пользователю, сохранив ее в sqlite. Приведенные выше ответы хороши, но имеют недостаток, например, если пользователь очистит / удалит данные, он сможет снова выполнять вращения. для этого я бы посоветовал вам сохранить ежедневное количество в удаленной базе данных и запрашивать его каждый раз, когда пользователь нажимает на кнопку вращения