2016-10-04 44 views
1

我有这个问题。我试图从另一个线程更新我的TextView,它不会让我。Android runOnUiThread未执行

我试过了一堆不同的解决方案,没有一个似乎没有帮助。在我的while循环代码中,始终打印“开始新循环”,但它不会从runOnUiThread继续。

任何人都可以帮我弄清楚如何从另一个线程更新TextView

//second thread 
protected void startKakkosThread() { 
    Thread t2 = new Thread() { 
     public void run() { 
      while (true) { 
       System.out.println("Started new loop"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          if(rullaavaNumero >= 0) { 
           rullaavaNumero--; 
           System.out.println(rullaavaNumero); 
           pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
           sleep(1000); 
          }else{ 
           rullaavaNumero = 9; 
           System.out.println(rullaavaNumero); 
           pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
           sleep(1000); 
          } 
         }catch (InterruptedException e){ 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     } 
    }; 
    t2.start(); 
} 
+1

我想你应该使用'Handler'或者'postDelayed'代替 –

+0

你应该考虑使用AsyncTask来做这件事。 – JoxTraex

回答

0

这是一个快速修复,你有一个无限循环,运行速度比一个线程可以有一个机会(时间)开始更快。所以,即使这样,如果语句,如果线程从不启动,然后睡眠没有任何影响,你有睡在你的线程。

而你在一个线程中的睡眠将不会像这样工作。你想延迟你的无限while循环,因此你需要在while循环中将睡眠移出线程。

因此,仍然有可能通过增加额外的睡眠来延迟线程,但所有这些取决于您想要实现的目标。

你的最终代码应该是这样的:

protected void startKakkosThread() { 
    Thread t2 = new Thread() { 
     public void run() { 
      while (true) { 
       System.out.println("Started new loop"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (rullaavaNumero >= 0) { 
          rullaavaNumero--; 
          System.out.println(rullaavaNumero); 
          pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
          // no need for sleep here 
          // sleep(1000); 
         } else { 
          rullaavaNumero = 9; 
          System.out.println(rullaavaNumero); 
          pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
          // no need for sleep here 
          // sleep(1000); 
         } 
        } 
       }); 

       // add this part 
       try { 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    t2.start(); 
} 

我已经测试它和它的作品,你也可以去什么@cricket已建议。

我的眼睛看到另一个问题,这不是你的问题的一部分,但很好的提及。我假设你要计算从90,它的情况下,需要通过删除=否则你计数,直到-1纠正以下行,所以你的代码行应该是这样的:

if(rullaavaNumero > 0) {...