Android TextView:只有创建视图层次结构的原始线程才能接触其视图
我全局声明了我的文本视图和计时器计数:Android TextView:只有创建视图层次结构的原始线程才能接触其视图,android,Android,我全局声明了我的文本视图和计时器计数: TextView txMp3Prog; int timer_count=0; 在onCreate()中,我做到了 我试图得到歌曲的持续时间,并设置如下文本 txMp3Prog.setText("00:0"+String.valueOf(timer_count)); 文本设置在这里 @Override public void run() { // TODO Auto-generated method stub
TextView txMp3Prog;
int timer_count=0;
在onCreate()中,我做到了
我试图得到歌曲的持续时间,并设置如下文本
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);
}
如何在run方法中将文本正确设置为textview。如日志中所示:
CalledFromErrorThreadException:仅创建的原始线程
视图层次可以触及其视图
表示您正试图从非UI线程更新或访问UI元素,因此使用或从非UI线程更新视图除主UI线程外,其他线程无法访问或更改UI的行为 你需要用这个
runOnUiThread(new Runnable() {
public void run() {
MyClass.this.txMp3Prog.setText("00:0"+String.valueOf(timer_count));
}
});
可能重复您在线搜索过吗?您不能在其他线程和runnable中触摸UI小部件。因此需要调用runOnUiThread()。
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)
runOnUiThread(new Runnable() {
public void run() {
MyClass.this.txMp3Prog.setText("00:0"+String.valueOf(timer_count));
}
});