TextView小部件未在android2.2上更新

问题描述 投票:0回答:1

我制作了一个通过广播播放的媒体播放器,并且试图从该流中获取歌曲标题。 我已经成功获取了歌曲标题,并将其显示在文本视图中,并在歌曲更改时对其进行了更新。

我已经使用android 1.5和android 2.1在android模拟器上测试了此代码。 该代码有效,但是当我在android 2.2上对其进行测试时,文本未更新。

有什么想法为什么不更新? 我用来更新textview的代码如下。

当我单击布局中的按钮时,将调用pageArtist()和pageTitle(),它们将获取歌曲标题和艺术家,并每4秒更改一次textview的文本

我的代码在我的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();
    }

这是我更新TEXTVIEW的方法

    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); 
   }

编辑 :此代码错误每4秒重复一次

android android-widget
1个回答
1
投票

Adil的评论是正确的。 您不能从后台线程更新UI,只能从UI线程更新。 要通过ui线程执行此操作,请删除设置文本的run方法主体中的代码,而应使用Handler:

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); 
   }
© www.soinside.com 2019 - 2024. All rights reserved.