Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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
Java 如何在android studio中创建时间计数器?_Java_Android_Time - Fatal编程技术网

Java 如何在android studio中创建时间计数器?

Java 如何在android studio中创建时间计数器?,java,android,time,Java,Android,Time,我正在尝试在我的应用程序上设置一个从0开始的计时器,从0(秒)开始计数,从(1…13…59…1:19,等等),然后结束暂停,或者在游戏结束时停止。我希望能够显示此暂停时间,以显示用户完成播放所需的时间 我已经尝试了计时方法(?),但它一直使应用程序崩溃,无法工作。当前我正在尝试使用线程t=新线程。。。但是一点运气都没有 我的一次尝试 Thread t = new Thread(){@Override public void run(){ t

我正在尝试在我的应用程序上设置一个从0开始的计时器,从0(秒)开始计数,从(1…13…59…1:19,等等),然后结束暂停,或者在游戏结束时停止。我希望能够显示此暂停时间,以显示用户完成播放所需的时间

我已经尝试了计时方法(?),但它一直使应用程序崩溃,无法工作。当前我正在尝试使用线程t=新线程。。。但是一点运气都没有

我的一次尝试

Thread t = new Thread(){@Override
            public void run(){
                try{
                    while(!isInterrupted()){
                        Thread.sleep(1000);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                TextView textViewTime = findViewById(R.id.textTimer);
                                long time = System.currentTimeMillis();
                                textViewTime.setText(time);
                            }
                        });
                    }
                } catch (InterruptedException e) {
                }
            }
        };
        t.start();
当前有“time”下划线,表示无法解析方法setText(长) 我曾无耻地尝试使用其他项目中的代码创建此计数器,但对于该项目,我使用了SimpleDataFormat方法,因此更简单。
TextView的
setText()
方法只接受字符串,这就是编译器在这一行中抛出错误的原因。使用
Long.toString(时间)
在文本视图中显示时间。
由于时间以毫秒为单位,您可能希望使用以下代码段将其转换为秒:

textViewTime.setText(Long.toString(time / 1000));
我还建议您对文本视图进行初始化
TextView textViewTime=findViewById(R.id.textTimer)
在代码前面,因为它不需要是循环的一部分。

文本视图的
setText()
方法只接受字符串,这就是编译器在这一行中抛出错误的原因。使用
Long.toString(时间)
在文本视图中显示时间。
由于时间以毫秒为单位,您可能希望使用以下代码段将其转换为秒:

textViewTime.setText(Long.toString(time / 1000));
我还建议您对文本视图进行初始化
TextView textViewTime=findViewById(R.id.textTimer)

在代码前面,因为它不需要成为循环的一部分。

Android提供了倒计时API来执行这些操作,请检查下面的示例

long maxCounter = 30000;
long diff = 1000;

    new CountDownTimer(maxCounter , diff ) {

        public void onTick(long millisUntilFinished) {
            long diff = maxCounter - millisUntilFinished;
            mTextField.setText("seconds completed: " +diff  / 1000);
           //here you can have your logic to set text to edittext
        }

        public void onFinish() {
            mTextField.setText("done!");
        }

    }.start();
编辑:


我已经更新了我的答案,将其用作向上计数器。

Android提供了倒计时API来执行这些操作,请查看下面的示例

long maxCounter = 30000;
long diff = 1000;

    new CountDownTimer(maxCounter , diff ) {

        public void onTick(long millisUntilFinished) {
            long diff = maxCounter - millisUntilFinished;
            mTextField.setText("seconds completed: " +diff  / 1000);
           //here you can have your logic to set text to edittext
        }

        public void onFinish() {
            mTextField.setText("done!");
        }

    }.start();
编辑:


我已经更新了我的答案以用作向上计数器。

下面是Android计时器的示例。Runnable以0:00格式显示计时器。示例0:18或3:42。这个按钮使计时器停止

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class TimerActivity extends AppCompatActivity implements View.OnClickListener {

private long starttime = 0;
private TextView tvTimer;
private Button btnEndTimer;
private Handler timerHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer);

    tvTimer = findViewById(R.id.tvTimer);
    btnEndTimer = findViewById(R.id.btnEndTimer);
    btnEndTimer.setOnClickListener(this);

    starttime = System.currentTimeMillis();
    timerHandler.postDelayed(timer, 0);
}

protected void onStop() {
    super.onStop();
    timerHandler.removeCallbacks(timer);
}

private Runnable timer = new Runnable() {
    @Override
    public void run() {
        long millis = System.currentTimeMillis() - starttime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds %= 60;
        tvTimer.setText(String.format("%d:%02d", minutes, seconds));

        timerHandler.postDelayed(this, 500);
    }
};

@Override
public void onClick(View v) {
    if (v.getId() == R.id.btnEndTimer) {
        timerHandler.removeCallbacks(timer);
    }
}
}

下面是一个Android定时器的示例。Runnable以0:00格式显示计时器。示例0:18或3:42。这个按钮使计时器停止

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class TimerActivity extends AppCompatActivity implements View.OnClickListener {

private long starttime = 0;
private TextView tvTimer;
private Button btnEndTimer;
private Handler timerHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer);

    tvTimer = findViewById(R.id.tvTimer);
    btnEndTimer = findViewById(R.id.btnEndTimer);
    btnEndTimer.setOnClickListener(this);

    starttime = System.currentTimeMillis();
    timerHandler.postDelayed(timer, 0);
}

protected void onStop() {
    super.onStop();
    timerHandler.removeCallbacks(timer);
}

private Runnable timer = new Runnable() {
    @Override
    public void run() {
        long millis = System.currentTimeMillis() - starttime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds %= 60;
        tvTimer.setText(String.format("%d:%02d", minutes, seconds));

        timerHandler.postDelayed(this, 500);
    }
};

@Override
public void onClick(View v) {
    if (v.getId() == R.id.btnEndTimer) {
        timerHandler.removeCallbacks(timer);
    }
}
}

这不是用于此目的的正确实现,android提供了用于此目的的倒计时API。请看此示例中的android计时器:这不是用于此目的的正确实现,android提供了用于此目的的倒计时API。请看此示例中的android计时器:谢谢帮助。正如你所说,我已经更正了代码,但应用程序仍在崩溃。我在一个名为GameView的单独类中创建应用程序,该类扩展了View,但该线程t=新线程当前位于扩展AppCompactActivity的MainActivity中。你知道是不是不同的位置导致了应用程序崩溃吗?没关系,让应用程序停止崩溃吧!计时器正在出现,但显示为“156079419”。。。不知道为什么。啊,实际上你不需要这个系统。currentTimeMillis()。只需创建一个时间变量,每次添加一秒钟。谢谢您的帮助。正如你所说,我已经更正了代码,但应用程序仍在崩溃。我在一个名为GameView的单独类中创建应用程序,该类扩展了View,但该线程t=新线程当前位于扩展AppCompactActivity的MainActivity中。你知道是不是不同的位置导致了应用程序崩溃吗?没关系,让应用程序停止崩溃吧!计时器正在出现,但显示为“156079419”。。。不知道为什么。啊,实际上你不需要这个系统。currentTimeMillis()。只需创建一个时间变量,每次添加一秒钟。谢谢!但遗憾的是,我需要一个向上计数而不是向下计数的计时器。纯粹是为了使用时间作为一个属性来计算以后的分数。谢谢!但遗憾的是,我需要一个向上计数而不是向下计数的计时器。纯粹用于将时间用作属性,以便以后计算点。