Android 从用户定义的时间量倒计时

Android 从用户定义的时间量倒计时,android,countdown,Android,Countdown,我有一个工作倒计时,但它只从我输入的硬编码整数开始倒计时。我希望用户能够键入一个数字,并让它从该数字倒计时。我希望输入“timeedit”的文本被输入一个字符串,并输入“startTime”的值 编辑:如果以下代码在屏幕上没有正确缩进,您也可以在此处查看代码: 代码: 嗯……我不确定问题出在哪里,但如果我理解正确,您只需要在onCreate()中执行类似的操作。 编辑 实际上,您需要将startTime和userTime放入onClick中。如果它位于onCreate()中,则您的EditTex

我有一个工作倒计时,但它只从我输入的硬编码整数开始倒计时。我希望用户能够键入一个数字,并让它从该数字倒计时。我希望输入“timeedit”的文本被输入一个字符串,并输入“startTime”的值

编辑:如果以下代码在屏幕上没有正确缩进,您也可以在此处查看代码:

代码:


嗯……我不确定问题出在哪里,但如果我理解正确,您只需要在
onCreate()中执行类似的操作。

编辑

实际上,您需要将
startTime
userTime
放入
onClick
中。如果它位于
onCreate()
中,则您的
EditText
将为空,除非您在xml中输入默认值,但无论如何,它都不是用户输入的值。如果用户输入的不是数字字符,您还需要用
try/catch
环绕

 public void onClick(View v) {
    String userTime = timeedit.getText().toString();
    long startTime = Long.parseLong(userTime);
    if (!timerHasStarted) {
        countDownTimer.start();
        timerHasStarted = true;
        startB.setText("STOP")

如果您想让用户进行一些输入,您只需通过以下方式获得:

    String userCountDown = timeEdit.getText().toString();
然后将其解析为长文本:

    long userStartTime = Long.parseLong(userCountDown);
然后,将它传递到倒计时

    countDownTimer = new MyCountDownTimer(UserStartTime, interval);
但是您必须确保timeEdit中的值是一个长值。通过将layout.xml文件中的属性inputType=“number”设置为R.id.timeedit,您可以确保获得一个长的。但为了确保有输入,您可以执行任何检查并向用户显示警告

        if (!timerHasStarted) { 
              String userCountDown = timeEdit.getText().toString();
             if(userCountDown.length()<1){

                Toast.makeText(yourActivity.this,"PLEASE DO SOME INPUT",Toast.LENGTH_LONG).show();
              }else{
                 long userStartTime = Long.parseLong(userCountDown);
                    countDownTimer = new MyCountDownTimer(userStartTime, interval);
                countDownTimer.start();
              timerHasStarted = true;
              startB.setText("STOP");
            }
       } else {

             countDownTimer.cancel();
             timerHasStarted = false;
              startTime = 30*1000;
              startB.setText("RESTART");
         }
如果(!timerHasStarted){
字符串userCountDown=timeEdit.getText().toString();

if(userCountDown.length()哇,你的代码缩进怎么了?这真的很难读。@GregHewgill:IntelliJ中的CTRL+ALT+L,问题就解决了P@Makoto:当然可以。不过,我见过有人试图写不缩进的代码,OP需要知道这不好。@GregHewgill这有点奇怪,因为在我的电脑上显示它是ind正确…无论如何,这里有一个链接让你看得更容易。@ThatGuyThere:好吧,Makoto已经解决了这个问题,所以它看起来有适当的缩进。在so上发布内容时,不要忘记使用格式化的预览。
CountDownTimer
构造函数和方法需要
long
值而不是
int
。此外,你还有有些情况下变量名称会发生冲突,所以,如果我使用你的代码,我真的理解(万岁!),它几乎可以工作,但出于某种原因,它会给我一个错误,它说“startTime=30*1000”你能发布日志吗,然后我们将看到问题的确切位置?好的,我使用了你的代码并让它工作。但是,每当我按下开始按钮时,它总是直接走到最后,实际上它不会倒计时。没有错误,所以日志不会显示太多你是否删除了countDownTimer=新的MyCountDownTimer(开始时间,间隔);在onCreate()中?如果没有,请执行…它的意思是:无效数字异常:无效长:“”是的,在匆忙中我忘了补充一点,你需要做一些错误检查。你可以用
try/catch
包围它,这样如果
startTime
是无效的
long
,你可以向用户显示一条消息,因为你会得到空字符串、文本等的异常。好的,使用这个代码,我不会得到错误,但即使是当我键入某个内容时,它仍然从30秒开始,而不是从我键入的数量开始。我很确定这与代码“private long startTime=30*1000”有关;但是如果我删除“30*1000”,它会给我一个“invalid long”错误是的,去掉这个变量,因为你要把它移到
onClick
。你想现在就使用这个用户定义的变量,所以在启动计时器之前,去掉原来的变量,在
onClick
中设置这个新的变量。但是确保用“try/catch”括起来,以防里面有无效字符好的,我做了一个现在,行“countDownTimer=new MyCountDownTimer(startTime,interval);”给了我一个错误。我尝试将其放入onClick();中,它只是强制关闭。我已使edittext只接受数字输入。
    countDownTimer = new MyCountDownTimer(UserStartTime, interval);
        if (!timerHasStarted) { 
              String userCountDown = timeEdit.getText().toString();
             if(userCountDown.length()<1){

                Toast.makeText(yourActivity.this,"PLEASE DO SOME INPUT",Toast.LENGTH_LONG).show();
              }else{
                 long userStartTime = Long.parseLong(userCountDown);
                    countDownTimer = new MyCountDownTimer(userStartTime, interval);
                countDownTimer.start();
              timerHasStarted = true;
              startB.setText("STOP");
            }
       } else {

             countDownTimer.cancel();
             timerHasStarted = false;
              startTime = 30*1000;
              startB.setText("RESTART");
         }