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 TextView setText在ScheduledExecutorService runOnUiThread内部不工作_Android_Textview_Scheduledexecutorservice_Android Runonuithread - Fatal编程技术网

Android TextView setText在ScheduledExecutorService runOnUiThread内部不工作

Android TextView setText在ScheduledExecutorService runOnUiThread内部不工作,android,textview,scheduledexecutorservice,android-runonuithread,Android,Textview,Scheduledexecutorservice,Android Runonuithread,代码: 我想每1秒更新一次TextView中的文本,但这似乎只适用于第一次,以后不会更新文本 有人知道问题出在哪里吗 private void startTimer() { final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1); scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {

代码:

我想每1秒更新一次TextView中的文本,但这似乎只适用于第一次,以后不会更新文本

有人知道问题出在哪里吗

private void startTimer() {
    final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    int count = 60;
                    time.setText(count - 1 + "");
                    count--;
                }
            });
        }
    }, 0 , 1000, TimeUnit.MILLISECONDS);
}
您可以使用处理程序

处理程序允许您发送和处理消息和可运行对象 与线程的MessageQueue关联。每个处理程序实例都是 与单个线程和该线程的消息队列关联。什么时候 创建新的处理程序后,它将绑定到的线程/消息队列 创建它的线程--从那时起,它将交付 将消息和可运行项添加到该消息队列,并在它们运行时执行它们 从消息队列中出来

您需要使用
handler.postDelayed(new Runnable()
方法

使可运行的r添加到消息队列中,以运行 经过指定的时间后。将运行runnable 此处理程序附加到的线程上

阅读

您可以使用处理程序

处理程序允许您发送和处理消息和可运行对象 与线程的MessageQueue关联。每个处理程序实例 与单个线程和该线程的消息队列关联。当 创建新的处理程序后,它将绑定到的线程/消息队列 创建它的线程--从那时起,它将交付 将消息和可运行项添加到该消息队列,并在它们运行时执行它们 从消息队列中出来

您需要使用
handler.postDelayed(new Runnable()
方法

使可运行的r添加到消息队列中,以运行 经过指定的时间后。将运行runnable 此处理程序附加到的线程上


我想每1秒更新一次TextView中的文本,
为什么不使用Handler.postDelayed?我想每1秒更新一次,持续60秒,这似乎是一个很好的例子,您可以检查我的答案:)sry伙计们我的错,我给了int count=60;在运行中,它总是显示59
我想每1秒更新TextView中的文本,
为什么不使用Handler.postdayed?我想它每1秒更新一次,持续60秒,这似乎是一个合适的例子,你可以检查我的答案:)sry伙计们我的错,我给了int count=60;内部运行,所以它总是显示59@downvoter上面的代码工作正常,你能告诉我为什么要投否决票吗?@上面的代码工作正常,你能告诉我为什么要投否决票吗?我已经搜索了很长时间,这是我能找到的解决我问题的唯一有效方法。@iTadreik很高兴听到这个消息!“我已经寻找了很长时间,这是我能找到的解决问题的唯一有效方法。”iTadreik很高兴听到这个消息!
int count = 60;
private void startTimer() {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
       runOnUiThread(new Runnable() {
          public void run() {
             if(count > 0){
               time.setText(count - 1 + "");
               count--;
             }
          }
       });
     }
   }, 0 , 1000, TimeUnit.MILLISECONDS);
}
 Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
       // Add your code Here

        handler.postDelayed(this, 1000); // You can change your time
      }
    }, 900);