2013-07-02 31 views
0

我宣布我的TextView和全球timer_count线获取歌曲的时长并设置文本如下的TextView:</p> <pre><code>TextView txMp3Prog; int timer_count=0; </code></pre> <p>中的onCreate()我做</p> <pre><code>txMp3Prog = (TextView)findViewById(R.id.txMp3Prog); </code></pre> <p>我想:只有原始的创建视图层次可以触摸其观点

txMp3Prog.setText("00:0"+String.valueOf(timer_count)); 

这里设置的文字

@Override 
    public void run() { 
     // TODO Auto-generated method stub 
      int currentPosition= 0; 
      int total = mp.getDuration(); 
      while (mp!=null && currentPosition<total) { 
       try { 
        Thread.sleep(1000); 
        currentPosition= mp.getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       }   

       sbMusicProgress.setProgress(currentPosition); 

       timer_count++; 
       System.out.println("Current position: "+timer_count); 
       txMp3Prog.setText("00:0"+String.valueOf(timer_count)); 


       String currenttext = String.valueOf(currentPosition); 
       String songDuration = currenttext.substring(0, currenttext.length()/2); 


      } 

但是,当我播放一首歌曲,我得到下面的错误日志:

07-02 11:25:36.575: E/AndroidRuntime(9418): FATAL EXCEPTION: Thread-13294 
    07-02 11:25:36.575: E/AndroidRuntime(9418): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4867) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:979) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4306) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.view.View.invalidate(View.java:10519) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.view.View.invalidate(View.java:10474) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.widget.TextView.checkForRelayout(TextView.java:6603) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.widget.TextView.setText(TextView.java:3710) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.widget.TextView.setText(TextView.java:3568) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at android.widget.TextView.setText(TextView.java:3543) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at package.ResultatMultiple.run(ResultatMultiple.java:290) 
    07-02 11:25:36.575: E/AndroidRuntime(9418):  at java.lang.Thread.run(Thread.java:856) 

我怎么能在run方法正确设置文本TextView的。

+2

的可能重复[Android“的只有创建视图层次可以触摸其观点原来的线程。”(http://stackoverflow.com/questions/5161951/ android-only-the-original-thread-that-c​​reated-a-view-hierarchy-can-touch-its-vi) – OcuS

+0

你甚至在网上搜索过吗? – OcuS

+2

您无法触摸其他线程中的UI小部件并且无法运行。所以需要调用runOnUiThread()。 –

回答

5

除了主UI线程没有其他线程可以访问或更改行为的UI。

您需要使用此

runOnUiThread(new Runnable() { 
public void run() { 
    MyClass.this.txMp3Prog.setText("00:0"+String.valueOf(timer_count)); 
    } 
}); 
4

在日志中:

CalledFromWrongThreadException:只有原始的创建 视图层次可以触摸其观点线程。

意味着你要更新或从非UI线程访问UI元素,以便使用HandlerrunOnUiThread更新来自非UI线程浏览

相关问题