无法让倒数计时器在我的程序中工作或显示

Can't get coundown timer to work or display in my program

我是一名新程序员,这是我的第一个项目,但我在使用三个定时器进行适当循环时遇到了一些麻烦,这些定时器应该一个接一个 运行。我设法让对象在循环中保存它们应该保存的值,但出于某种原因,计时器没有像它应该的那样显示在文本字段中。

          startBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("mTimer:", String.valueOf(mTimer));
            Log.i("mReps:", String.valueOf(mReps));
            Log.i("Flexion:", String.valueOf(flexionTimer));
            Log.i("Hold:", String.valueOf(holdTimer));
            Log.i("Extension:", String.valueOf(extensionTimer));

            for (int iter = 0; iter < mReps; iter++) {
                Log.i("Loop:", String.valueOf(iter));

                final Timer workingFlexionTimer = new Timer();
                workingFlexionTimer.schedule(new TimerTask() {
                    int counter = ((int) flexionTimer / 1000);
                    @Override
                    public void run () {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mPhase.setText("Flexion");
                                mCountDownTimer.setText("" + String.format(String.valueOf(counter + 1)));
                            }
                        });
                        if (counter-- == 0) {
                            workingFlexionTimer.cancel();
                        }
                    }
                }, 0, 1000);


                final Timer workingHoldTimer = new Timer();
                workingHoldTimer.schedule(new TimerTask() {
                    int counter = ((int) holdTimer / 1000);
                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mPhase.setText("Hold!!!");
                                mCountDownTimer.setText("" + String.format(String.valueOf(counter + 1)));
                            }
                        });
                        if (counter-- == 0) {
                            workingHoldTimer.cancel();
                        }
                    }
                }, flexionTimer, 1000);

                final Timer workingExtensionTimer = new Timer();
                workingExtensionTimer.schedule(new TimerTask() {
                    int counter = ((int) extensionTimer / 1000);
                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mPhase.setText("Extension");
                                mCountDownTimer.setText("" + String.format(String.valueOf(counter + 1)));
                            }
                        });
                        if (counter-- == 0) {
                            workingExtensionTimer.cancel();
                        }
                    }
                }, (flexionTimer + holdTimer), 1000);
            }

此时我有点不知所措,如有任何建议,我们将不胜感激。

使用处理程序


    private void Timer() {
        handler = new Handler();
        Run =new Runnable() {
        @Override
        public void run() { //Do something after 10 sec
        Toast.makeText(getActivity(), "Timer called!",Toast.LENGTH_LONG).show();
        Timer(); // Do again                
        }};
        handler.postDelayed(Run , 10000);  // 10 sec
    }

第一个定时器flexionCountDownTimer是在循环中启动的,也就是说如果mReps大于,就会启动多次1. 这可能导致 flexionCountDownTimer 的第二个 运行 在第一个 运行 完成之前。这是您的预期行为吗?

更新

对于计时器我总是这样做:

    final TextView textView = (TextView)findViewById(R.id.textView);
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        int counter = 10;
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(""+counter);
                }
            });

            if (counter-- == 0){
                timer.cancel();
            }

        }
    }, 0, 1000);

timer.schedule(new TimerTask() {
        int counter = 10;
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(""+counter);
                }
            });

            if (counter-- == 0){
                timer.cancel();
            }

        }
    }, 10000, 1000);


timer.schedule(new TimerTask() {
        int counter = 10;
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(""+counter);
                }
            });

            if (counter-- == 0){
                timer.cancel();
            }

        }
    }, 20000, 1000);

了解更多信息check this

在 link...

public void schedule(TimerTask task, long delay, long period)

以上代码。立即启动 运行()

long delay = 0;// in ms
long period = 1000;// in ms

所以每 1000 毫秒调用 运行() 和计数器--。当 counter = 0 时取消。

如果要运行,一个接一个,放延时。

更新

现在第一个会立即 运行,第二个会等待 10000 毫秒(10 秒)然后 运行,最后第三个会等待 20000 毫秒(20 秒)然后 运行。