Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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 为什么我会得到;致命异常:Thread-2723“;将文本添加到String.format时?_Android - Fatal编程技术网

Android 为什么我会得到;致命异常:Thread-2723“;将文本添加到String.format时?

Android 为什么我会得到;致命异常:Thread-2723“;将文本添加到String.format时?,android,Android,我有一个可运行的计时器线程: private Runnable updateTimerThreadRecording = new Runnable() { public void run() { timeInMilliseconds = SystemClock.uptimeMillis() - startTime; updatedTime = timeSwapBuff + timeInMilliseconds;

我有一个可运行的计时器线程:

private Runnable updateTimerThreadRecording = new Runnable() {

        public void run() {

            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;

            updatedTime = timeSwapBuff + timeInMilliseconds;

            int secs = (int) (timeInMilliseconds / 1000);
            int mins = secs / 60;
            secs = secs % 60;
            int hours = mins / 60;
            mins = mins % 60;
            String timer = "Recording Time: " + String.format("%02d", hours) + ":" + String.format("%02d", mins) + ":" + String.format("%02d", secs);
            timerValueRecord.setText(timer);
            customHandler.postDelayed(this, 1000);
        }

    };
我补充的是:“录制时间:” 字符串计时器的原始行为:

String timer = "" + String.format("%02d", hours) + ":" + String.format("%02d", mins) + ":" + String.format("%02d", secs);
但由于我增加了录音时间: 我得到了这个例外。我试图在“%02d”之前以String.format添加此文本,但出现了相同的异常

没有它,就像原始线路一样,也没有例外。 没有我添加的文本,它运行良好,我看到的是:00:00:00,它正在数秒。但是我现在想添加一个文本,这样它在timerValueRecord文本视图上看起来就像这样:录制时间:00:00:00

这是Logcat:

11-16 19:18:46.505  20569-20753/com.test.webservertest E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2723
    Process: com.test.webservertest, PID: 20569
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6334)
            at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:890)
            at android.view.View.requestLayout(View.java:17407)
            at android.view.View.requestLayout(View.java:17407)
            at android.view.View.requestLayout(View.java:17407)
            at android.view.View.requestLayout(View.java:17407)
            at android.view.View.requestLayout(View.java:17407)
            at android.view.View.requestLayout(View.java:17407)
            at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:360)
            at android.view.View.requestLayout(View.java:17407)
            at android.widget.TextView.checkForRelayout(TextView.java:7054)
            at android.widget.TextView.setText(TextView.java:4186)
            at android.widget.TextView.setText(TextView.java:4044)
            at android.widget.TextView.setText(TextView.java:3999)
            at com.test.webservertest.MainActivity$1.run(MainActivity.java:230)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at com.test.webservertest.MainActivity$3.run(MainActivity.java:272)
            at java.lang.Thread.run(Thread.java:818)

您正在尝试修改另一个线程(您的可运行线程)中的视图字段。Android不接受这一点,您需要将此更改委派给您在UI上使用的线程。问题不在
字符串中。格式
timerValueRecord.setText(计时器)中您可以尝试使用发布您的runnable。到目前为止,我还不知道这样做的性能问题,但请注意。

您不能使用线程来更新ui。所以
定时器
/
定时器任务
、原始
线程
和任何创建线程的东西都是禁忌。幸运的是,重复的任务不需要线程:或者使用
millisInFuture
设置为
Long.MAX\u值的线程,这样它就永远不会用完。