Java 如何限制单击事件每天仅3次,然后禁用它并在第二天启用单击?
我正在为奖品制作旋转木马,我可以在3次点击后禁用点击事件,但无法在另一天启用点击,我只想让用户每天只点击3次,并在当天禁用点击事件,只在第二天启用Java 如何限制单击事件每天仅3次,然后禁用它并在第二天启用单击?,java,android,android-studio,service,Java,Android,Android Studio,Service,我正在为奖品制作旋转木马,我可以在3次点击后禁用点击事件,但无法在另一天启用点击,我只想让用户每天只点击3次,并在当天禁用点击事件,只在第二天启用 public class MainActivity extends AppCompatActivity implements SpinningWheelView.OnRotationListener<String> { private SpinningWheelView wheelView; private TextView rota
public class MainActivity extends AppCompatActivity implements SpinningWheelView.OnRotationListener<String> {
private SpinningWheelView wheelView;
private TextView rotate,spinCount,spinPoint;
int COUNT=0;
int points=0;
private SharedPreferences mPrefs;
private SharedPreferences.Editor editor;
private String sharedPref="MY_PREF";
int count= 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPrefs=getSharedPreferences(sharedPref,Context.MODE_PRIVATE);
mPrefs.getInt("count",0);
editor=mPrefs.edit();
wheelView = (SpinningWheelView) findViewById(R.id.wheel);
rotate = (TextView) findViewById(R.id.rotate);
spinCount=(TextView)findViewById(R.id.spin_count);
spinPoint=(TextView)findViewById(R.id.spin_point);
wheelView.setItems(R.array.dummy);
wheelView.setOnRotationListener(this);
rotate.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View v) {
int i = mPrefs.getInt("count",0);
if (i<3){
count++;
editor.putInt("count",count);
editor.apply();
wheelView.rotate(80, 3000, 50);
}else {
rotate.setEnabled(false);
//how can it be enabled on another day
}
}
});
}
我可以通过共享首选项来实现,但共享首选项可以通过清除数据和缓存来清除,这对我的应用程序不好,因为我想将它们的点存储在云上
最简单的解决方案
isTodayClickable=真/假
OnCreate获取时间戳并将clicable设置为true/单击并
单击“日期”和“保存在共享首选项中”3次后单击“启用”
如果存在日期的共享pref,则将其保存在pref write logic中为false
检查日期是否超过一天,然后将其设置为true并保存
优先
但无法在另一天启用单击
您可以存储首次单击的日期/时间,并在24小时后重置,或在午夜重置。
正如您所知,不建议这样做,因为客户端可以轻松绕过这些限制
回到主要问题
如何限制点击事件每天仅3次
一,。为该客户端安装创建UUID:
这远远不够好
二,。在服务器的数据库/表中为此UUID的单击添加一个字段。UUID是您的主键。每次单击后增加单击字段。要将如此简单的请求发送到服务器,您实际上不需要库,但这样做很简单
如果internet不可用,请告诉您的用户。不要继续离线,因为他们很容易作弊
三,。在服务器中存储第一次单击的日期/时间
四,。在SQL数据库中创建一个简单的存储过程,将日期重置为00:00。在共享首选项中创建日期对象存储,并单击按钮数。 在第二天创建新的日期,并使用共享首选项存储日期映射。 如果匹配,则禁用按钮,否则启用。下面是一个例子
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int clicks = 0;
clicks++;
if (clicks >3){
button.setEnabled(false);
}
SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("clicks", clicks);
editor.putString("date",date.toString());
editor.apply();
}
});
快乐编码 您可能必须部署一个后端服务器来存储每个用户的数据…谢谢您,先生,但我必须使用服务,因为通过清除缓存可以清除共享首选项,所以用户很容易作弊。。