我宣佈我的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的。
的可能重複[Android「的只有創建視圖層次可以觸摸其觀點原來的線程。」(http://stackoverflow.com/questions/5161951/ android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi) – OcuS
你甚至在網上搜索過嗎? – OcuS
您無法觸摸其他線程中的UI小部件並且無法運行。所以需要調用runOnUiThread()。 –