在第二天10次点击后,ImageButton每天只允许10次点击

时间:2017-01-25 08:52:29

标签: java android multithreading

我创建了一个图像按钮,每天只允许10次点击。现在 我希望使用线程将图像按钮休眠24小时,之后应该允许第二天再次进行10次点击(24小时后)。我应该如何使用线程来按住按钮24小时。请建议我如何解决这个问题。

ActivityTwo.java:

public class ActivityTwo extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_two);
    ImageButton playbtn1 = (ImageButton) findViewById(R.id.playButton1);
    playbtn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), ActivityTwo.class);
            startActivity(intent);
            intent.putExtra("scoretwo",1);
            setResult(RESULT_OK,intent);
        }
    });

MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final int RC_ACT_TWO = 1;
    TextView scoreCount = (TextView) findViewById(R.id.score_points);
    String score = scoreCount.getText().toString();
    int scorevalue = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageButton viewbtn1 = (ImageButton) findViewById(R.id.view1);
        viewbtn1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {
                Intent intent1 = new
                Intent(getApplicationContext(), ActivityTwo.class);
                startActivity(intent1);
                startActivityForResult(intent1, RC_ACT_TWO);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_ACT_TWO) {
            if (resultCode == RESULT_OK) {
                int incre = 0;
                int add = data.getIntExtra("scoretwo", 0);
                scorevalue = Integer.parseInt(score);
                if (add != 0) {
                    incre = incre + add;
                    if (incre > 0 && incre < 11) {
                        scorevalue = scorevalue + incre;
                        scoreCount.setText(scorevalue);
                    }
                    else {}
                }
                else {
                    scoreCount.setText("-1");
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:0)

以下是一种可能性:您可以使用Android的SharedPreferences。保存第一次点击的时间戳,以及到目前为止的点击次数..

单击按钮或启动活动时,请检查已保存的点击次数。如果它达到10,则禁用该按钮。

在活动开始时,还要检查已保存的时间戳。如果超过24小时,请再次重新启用此按钮并重置首选项中保存的点击次数。

有关详细信息,请查看this link

答案 1 :(得分:0)

Thread.Sleep it put the main thread sleeping for the time you set so don't use it on the main thread)以来不是一个好方法,它会假设用户24小时开启应用程序

所以

  1. 如果您睡了24小时,则不会每天设置限制,但是从上次完成后每隔24小时设置 IE:如果我在星期一的23.59点击10次,我将能够在星期二的23.59再次进行,所以我失去了一天。
  2. 如上所述,thread.sleep正在使主线程处于休眠状态,因此如果我关闭应用程序然后将其打开,则会丢失计时器。 +这不是一个好习惯。
  3. 说,一种方法可能是使用SharedPreferences 这是一种方式,还有许多其他也可能比这更好,但这是第一次出现在我的脑海中 )。

    现在,使用SharedPreferences(Useful link),存储完成的点击次数和用户点击的日期

    此时,每个应用程序的启动,读取当天和计数。

    如果当天与今天相同,请阅读计数,每次用户点击时,添加1.在10,禁用带有消息的按钮(只需添加,如果点击&gt; = 10执行禁用)。

    每次用户点击按钮时,将1添加到计数器并将其保存在共享偏好中,同时保存当前日期。

    这样你就完成了,因为如果用户今天点击了10次,你将把这个值存储在SharedPreferences中。如果日期已更改,您会注意到SharedPreferences中保存的日期与当天不同。

    正如我上面所说,这是一种方式,你可以找到很多其他方法。我在这里只提供有用链接的逻辑,所以你肯定能够自己重现代码,对于任何问题,怀疑我在这里。

答案 2 :(得分:0)

让你的线程进入睡眠状态不是一个好的解决方案。 最好的方法是存储单击图像的次数,为此你有很多解决方案,从sharedPreferences到sql数据库(但如果你存储的唯一数据是这个数字,那么数据库就会过度杀伤)。 p>