Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-在倒计时运行时执行命令_Android_Timer - Fatal编程技术网

Android-在倒计时运行时执行命令

Android-在倒计时运行时执行命令,android,timer,Android,Timer,我正在尝试编写一个应用程序,在textview上向用户显示一个字符串,并替换用户输入的文本。这应该在60秒的时间间隔内发生。 我尝试使用倒计时,它在onFinish方法中将布尔变量设置为false。虽然这个布尔值是真的,但我正在尝试更改textview中的字符串(进一步的工作将是由于用户操作而更改文本,但我仍在尝试为简单操作获得这项工作) 目前,该应用程序似乎被卡住了,什么也没发生,但如果我删除while循环,屏幕上就会出现一条文本(应该是这样的) 使用while循环是否有问题?有没有一种与计时

我正在尝试编写一个应用程序,在textview上向用户显示一个字符串,并替换用户输入的文本。这应该在60秒的时间间隔内发生。 我尝试使用倒计时,它在onFinish方法中将布尔变量设置为false。虽然这个布尔值是真的,但我正在尝试更改textview中的字符串(进一步的工作将是由于用户操作而更改文本,但我仍在尝试为简单操作获得这项工作)

目前,该应用程序似乎被卡住了,什么也没发生,但如果我删除while循环,屏幕上就会出现一条文本(应该是这样的)

使用while循环是否有问题?有没有一种与计时器配合使用的不同方法

(注:我知道代码中存在一些问题,但这只是为了隔离问题。谢谢!)

编辑: 我将努力澄清我的意图:
我想给用户任务,他应该在给定的时间内执行。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务时,如果时钟上还有时间,他将按下一个按钮,另一个任务将出现。目标是在给定的时间内完成尽可能多的任务

我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_game);

    Bundle b = getIntent().getExtras();
    game = b.getParcelable("game_record");

    figuresList = new ArrayList<String>(game.getFiguresList());

    clockView = (TextView) findViewById(R.id.clockView);
    figureText = (TextView) findViewById(R.id.figureText);

    timer = new CountDownTimer(10000, 1000) {

        public void onTick(long millisUntilFinished) {
            clockView.setText(Long.toString(millisUntilFinished / 1000));
        }

        public void onFinish() {
            clockView.setText("done!");
            isTurn = false;
        }
    };

    playRound();
}

private void playRound() {

    figuresIterator = figuresListUsage.iterator();
    isTurn = true;
    String nextFigure = figuresIterator.next();
    timer.start();

    while (isTurn == true) {
        figureText.setText(nextFigure);
        nextFigure = figuresIterator.next();
    }
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u start\u game);
Bundle b=getIntent().getExtras();
游戏=b.getParcelable(“游戏记录”);
figuresList=newArrayList(game.getFiguresList());
clockView=(TextView)findViewById(R.id.clockView);
figureText=(TextView)findViewById(R.id.figureText);
计时器=新的倒计时计时器(10000,1000){
公共void onTick(长毫秒未完成){
clockView.setText(Long.toString(millisuntiltfinished/1000));
}
公共无效onFinish(){
clockView.setText(“完成!”);
isTurn=假;
}
};
playRound();
}
私人空旷游乐场(){
figuresIterator=FigureListUsage.iterator();
isTurn=true;
字符串nextFigure=figuresIterator.next();
timer.start();
while(isTurn==true){
figureText.setText(下一幅图);
nextFigure=figuresIterator.next();
}
}

理解游戏逻辑有点困难,但我看到你的代码存在的主要问题是,你正在进入生命周期事件处理程序中的循环。看看这个。您正在onCreate中停止该活动,在该活动完成其生命周期处理之前,仍有工作要做

我建议你试着将游戏回合事件绑定或使用不同的线程。android有很多线程API,由于我不知道游戏回合的性质,我不能推荐任何线程API。

删除循环并添加
figureText.setText(nextFigure);nextFigure=figuresIterator.next()到您的
onTick()
。您不应该需要布尔值,因为一旦计数器完成,它将停止更改文本。是的,但这只是这个问题的一个解决方法,正如我所说,这是我所需要的一个简化案例。这样做,将在固定时间内更改文本,而我想更改它,因为用户输入您的问题不清楚。那你为什么要用倒计时呢?也许你想知道如何使用TextWatcher我想给用户任务,他应该在给定的时间内执行这些任务。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务时,如果时钟上还有时间,他将按下一个按钮,另一个任务将出现。我们的目标是在给定的时间内完成尽可能多的任务,这就更清楚了。您想什么时候检查输入?在每个字符上,可能用户在尝试任务后单击了一个按钮,有什么不同吗?