TextView小部件在android2.2上不更新
我制作了一个媒体播放器,通过shoutcast进行流媒体播放,并试图从歌曲流中获取歌曲标题。我已经成功获得了歌曲标题,并在一个文本视图中进行了显示,并在歌曲更改时对其进行更新。TextView小部件在android2.2上不更新
我用android模拟器测试了这段代码,使用了android 1.5和android 2.1。该代码的作品,但当我在android 2.2上测试它的文本没有更新。
任何想法,为什么它不更新?我用来更新textview的代码如下。
当我点击我的布局pageArtist()和PAGETITLE(按钮)将被调用,他们将获得歌曲名称和艺术家,改变TextView的文本每4秒
我的代码在我的onCreate ()
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
streamButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
pageArtist();
pageTitle();
}
这是我的FOR更新我的TextView METHOD
private void pageTitle(){
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
URL url;
try {
url = new URL("http://teststream.com:8000/listen.mp3");
IcyStreamMeta icy = new IcyStreamMeta(url);
TextView title1 = (TextView) findViewById(R.id.song_title);
String T;
T = icy.getTitle();
title1.setText(T);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 2, 4000);
}
EDIT:THIS CO DE每4秒重复一次TIMER
Adil的评论是正确的。您无法从后台线程更新UI,只能更新UI线程。要通过UI线程为此,删除代码在你的run方法的机构,设置文本,而是使用一个处理程序:
private Handler handler;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
handler = new Handler();
streamButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
pageArtist();
pageTitle();
}
}
}
private void pageTitle(){
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
URL url;
try {
url = new URL("http://teststream.com:8000/listen.mp3");
IcyStreamMeta icy = new IcyStreamMeta(url);
final TextView title1 = (TextView) findViewById(R.id.song_title);
final String T = icy.getTitle();
handler.post(new Runnable(){
public void run(){
title1.setText(T);
}
});
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 2, 4000);
}
好吧,我会尝试你的建议:) – HeartlessArchangel
我似乎无法使它的工作,你可以编辑上面的代码,顺便说一句我希望这种方法重复每4秒 – HeartlessArchangel
我用完整的代码编辑了我的回复。 – Chris
在UI组件的变化应该在UI线程进行,而不是在后台线程。使用Handler或AsyncTask来更新UI。 –
这是关于一个简单的'TextView'在一个活动(这是一个UI小部件)或关于一个真正的[Android应用小部件](http://developer.android.com/guide/topics/appwidgets/index.html) ? –
感谢@adil soomro你能编辑我的代码吗?更正它谢谢 – HeartlessArchangel