一键添加:

tStart = System.currentTimeMillis();


在第二个单击按钮事件中,我添加了:

long tEnd = System.currentTimeMillis();
long tDelta = tEnd - tStart;
double elapsedSeconds = tDelta / 1000.0;
timerValue.setText("00:00:" + tDelta);


tStart是全局long var。

而且timerValue是一个TextView也是全局的。

问题是,当我执行setText一些非常长的数字时,我正在使用timerValue的秒数,例如:1442257716372,我在一两秒钟后单击了第二个按钮。

另一个问题是,如果两次点击之间的时间超过60秒,我该如何更新分钟?

我正在计算的Runnable:

Runnable serverChecksRunnable = new Runnable()
    {
        @Override
        public void run()
        {
            if (connectedSuccess == true)
            {
                    checkServer = Get(iptouse + "uploadstatus");

            }

            Handler h=new Handler(Looper.getMainLooper());
            h.post(new Runnable()
            {
                @Override
                public void run()
                {
                    if (connectedSuccess)
                    {
                        if (checkServer != null)
                        {
                            long tStart;
                            String a = null;
                            try
                            {
                                a = new String(checkServer, "UTF-8");
                                textforthespeacch = a;
                                if (textforthespeacch.contains("upload completed"))
                                {
                                    String varr = textforthespeacch.substring(17);
                                    String varr1 = textforthespeacch.substring(0, 16);
                                    textforthespeacch = varr1;
                                    status1.setText("Upload completed" + " " + varr + "%");
                                    long tEnd = System.currentTimeMillis();
                                    long tDelta = tEnd - tStart;
                                    double elapsedSeconds = tDelta / 1000.0;
                                    timerValue.setText("00:00:" + elapsedSeconds);
                                    numberofuploadedfilescounter += 1;
                                    uploadedfilescount.setText(("Uploaded Files: " + numberofuploadedfilescounter));
                                    MainActivity.this.initTTS();
                                }
                                if (textforthespeacch.contains("uploading"))
                                {
                                    String[] split = textforthespeacch.split(" ");
                                    textforthespeacch = split[0];
                                    status1.setText("Uploading" + " " + split[1] + "%");
                                    tStart = System.currentTimeMillis();
                                    servercheckCounter += 1;
                                    if (servercheckCounter == 1)
                                    {
                                        MainActivity.this.initTTS();
                                    }
                                }
                            } catch (UnsupportedEncodingException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }

                }
            });

            customHandler.postDelayed(serverChecksRunnable,1000);
        }
    };


我应该向tStart发起什么?
我第一次很长时间tStart = 0;

现在我删除了0,但是后来在代码中的tStart上出现错误,说该变量未初始化。

我将tStart移到Runnable顶部的原因是tStart与tDelta和tEnd不在同一位置。

最佳答案

使用@bobince对this other question的答案,您可以这样做:

long s = (System.currentTimeMillis() - tStart) / 1000;
timerValue.setText(String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60)));

09-26 15:12