【发布时间】:2020-06-17 17:11:00
【问题描述】:
我正在尝试设置 dailyReward 系统,我几乎完成了,但我确实遇到了 CountDownTimer 的一些问题。因此,当 Timer 变为 0,并且您点击 claimReward 时,您将获得奖励,并且计时器应该重新开始倒计时。但问题是;如果您重新启动应用程序它会恢复正常,它确实会减去负数。
这是倒计时方法,无论我在 onFinish() 中放入什么,都不会发生任何事情
public void loadDailyRewardCountDown() {
CountDown = true;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setLenient(false);
String endTime = getDailyRewardsDate;
Date endDate;
Date startDate;
long milliseconds = 0;
long millisec = 0;
try {
endDate = formatter.parse(endTime);
startDate = formatter.parse(curDate);
millisec = startDate.getTime();
milliseconds = endDate.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long startTime = millisec;
mCountDownTimer = new CountDownTimer(milliseconds, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//startTime = startTime - 1;
Long serverUptimeSeconds =
(millisUntilFinished - startTime) / 1000;
//String daysLeft = String.format("%d", serverUptimeSeconds / 86400);
//txtViewDays.setText(daysLeft);
String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
if (hoursLeft.equals("0")) {
tv_hour.setVisibility(View.GONE);
}else {
tv_hour.setText(hoursLeft + " H");
}
String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);
if (minutesLeft.equals("0")) {
tv_minutes.setVisibility(View.GONE);
} else if (hoursLeft.equals("0")) {
tv_minutes.setText(minutesLeft + " Min");
} else {
tv_minutes.setText(minutesLeft + " M");
}
String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
if (hoursLeft.equals("0") && minutesLeft.equals("0")) {
tv_seconds.setText(secondsLeft + " Seconds");
} else {
tv_seconds.setText(secondsLeft);
}
if (hoursLeft.equals("0") && minutesLeft.equals("0") && secondsLeft.equals("0")){
Toast.makeText(DashBoardActivity.this, "Finished", Toast.LENGTH_SHORT).show();
GetCurDate();
mCountDownTimer.cancel();
layout_countdown.setVisibility(View.GONE);
btn_claim_daily_reward.setVisibility(View.VISIBLE);
}
}
@Override
public void onFinish() {
}
}.start();
}
在你必须点击以领取奖励的按钮中,我只是将 loadDailyRewardCountDown 和 CountDown 布尔值调用为 false。
【问题讨论】: