Android 为什么处理程序中的文本没有更新?

Android 为什么处理程序中的文本没有更新?,android,textview,Android,Textview,我正在尝试更新两个textviewtxtName和textEndName。当我调试时,有时它会更新文本,但其余时间它不起作用。有时它是有效的,但并不完全是它所设想的。下面给出的代码中有什么问题 txtName = (TextView) findViewById(R.id.txtstarttag); textEndName = (TextView) findViewById(R.id.txtendtag); startSec = (TextView) findViewByI

我正在尝试更新两个
textview
txtName和textEndName。当我调试时,有时它会更新文本,但其余时间它不起作用。有时它是有效的,但并不完全是它所设想的。下面给出的代码中有什么问题

    txtName = (TextView) findViewById(R.id.txtstarttag);
    textEndName = (TextView) findViewById(R.id.txtendtag);
    startSec = (TextView) findViewById(R.id.txtstartsecnd);
    endSec = (TextView) findViewById(R.id.txtendsecnd);
    btnplay = (ImageButton) findViewById(R.id.btnplay);
    btnback = (Button) findViewById(R.id.btnback);
    btnback.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MyMixes) getParent()).goBack();
        }
    });

    btnplay.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            btnClick();
        }
    });

    splitArray();

    Thread t = new Thread()
    {
        public void run() 
        {
            while (isDownloading) 
            {
                if (Data.filenames != null && Data.filenames.size() >= (getIntent() .getExtras().getInt("index") + 1) && Data.filenames.get(getIntent().getExtras() .getInt("index")) != null) 
                {
                    try 
                    {
                        mediaPlayer = new MediaPlayer();
                        mediaPlayer.setDataSource(Data.filenames.get(getIntent().getExtras().getInt("index")));
                        mediaPlayer.prepare();
                        mediaPlayer.start();
                        Timer t = new Timer();

                        handler.postDelayed(onEverySecond, 1000);
                        mediaPlayer.setOnCompletionListener(new OnCompletionListener() 
                        {
                            @Override
                            public void onCompletion(MediaPlayer mp) {
                                mediaPlayer.seekTo(0);
                            }
                        });
                        boolean isPlaying = mediaPlayer.isPlaying();
                        if(!isPlaying){
                            mediaPlayer.pause();

                        }
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        isDownloading = false;
                    }
                }
            }
        }
    };
    t.start();
}

private Runnable onEverySecond=new Runnable()
{
    public void run() 
    {
        if (mediaPlayer.isPlaying()) 
        {
            for (int i = index; i < intervals.length; i++) 
            {
                if (i != index && mediaPlayer.getCurrentPosition() > intervals[i]) 
                {
                    index = i;
                    handler.dispatchMessage(handler.obtainMessage());
                    handler.postDelayed(onEverySecond, 1000);
                    break;
                }
            }
        }
    }
};

Handler handler = new Handler() 
{
    @Override
    public void handleMessage(Message msg) {
        txtName.setText(arrName.get(index));
        textEndName.setText(arrName.get(index+1));
        super.handleMessage(msg);
    }
};

public void splitArray()
{

    strSplit = kggg.split("\n");// string array
    intervals = new long[strSplit.length];
    Time timer;

    for (int j = 0; j < strSplit.length; j++) 
    {
        split = strSplit[j];// string
        split1 = split.split("-");// string array

        arrName.add(split1[0]);
        String timeq = split1[1];

        String[] timed = timeq.split(":");

        if(timed.length == 3)
        {
            timer = new Time(Integer.parseInt(timed[0].trim()), Integer.parseInt(timed[1].trim()), Integer.parseInt(timed[2].trim()));
            intervals[j] = timer.getTime();
        }
        else if(timed.length == 2)
        {
            timer = new Time(0, Integer.parseInt(timed[0].trim()), Integer.parseInt(timed[1].trim()));
            intervals[j] = timer.getTime();
        }
        else if(timed.length == 1)
        {
            timer = new Time(0, 0, Integer.parseInt(timed[0].trim()));
            intervals[j] = timer.getTime();
        }
    }

    for (int j = intervals.length-1; j >= 0 ; j--) 
    {
        intervals[j] = intervals[j] - intervals[0]; 
    }
}
public void btnClick()
{
    k++;
    k = k % 2;
    startSong(k);
}
private void startSong(int i) {
    if (i == 1) {
        System.out.println("11111" + i);
        btnplay.setImageResource(R.drawable.pause);
        try {
            System.out.println("start try chech------");
            mediaPlayer.start();
        } catch (Exception e) {
            mediaPlayer.pause();
        }
    }
    if (i == 0) {
        btnplay.setImageResource(R.drawable.play);
        mediaPlayer.pause();
        System.out.println("00000" + i);
    }
}
txtName=(TextView)findviewbyd(R.id.txtstarttag);
textEndName=(TextView)findViewById(R.id.txtendtag);
startSec=(TextView)findViewById(R.id.txtstartsecnd);
endSec=(TextView)findViewById(R.id.txtendsecnd);
btnplay=(ImageButton)findViewById(R.id.btnplay);
btnback=(按钮)findViewById(R.id.btnback);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
((MyMixes)getParent()).goBack();
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
btnClick();
}
});
splitArray();
线程t=新线程()
{
公开募捐
{
while(正在下载)
{
如果(Data.filenames!=null&&Data.filenames.size()>=(getIntent().getExtras().getInt(“索引”)+1)和&Data.filenames.get(getIntent().getExtras().getInt(“索引”)!=null)
{
尝试
{
mediaPlayer=新的mediaPlayer();
mediaPlayer.setDataSource(Data.filenames.get(getIntent().getExtras().getInt(“index”));
mediaPlayer.prepare();
mediaPlayer.start();
定时器t=新定时器();
handler.postDelayed(每秒钟一次,1000);
mediaPlayer.setOnCompletionListener(新的OnCompletionListener()
{
@凌驾
完成时的公共作废(MediaPlayer mp){
mediaPlayer.seekTo(0);
}
});
布尔值isplay=mediaPlayer.isplay();
如果(!显示){
mediaPlayer.pause();
}
}捕获(IllegalArgumentException e){
e、 printStackTrace();
}捕获(非法状态){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}最后{
isDownloading=false;
}
}
}
}
};
t、 start();
}
private Runnable onEverySecond=new Runnable()
{
公开募捐
{
if(mediaPlayer.isPlaying())
{
for(int i=索引;i间隔[i])
{
指数=i;
handler.dispatchMessage(handler.obtainMessage());
handler.postDelayed(每秒钟一次,1000);
打破
}
}
}
}
};
Handler=newhandler()
{
@凌驾
公共无效handleMessage(消息消息消息){
setText(arrName.get(index));
textEndName.setText(arrName.get(index+1));
超级handleMessage(msg);
}
};
公共void splitArray()
{
strSplit=kggg.split(“\n”);//字符串数组
间隔=新长[strSplit.length];
定时器;
对于(int j=0;j=0;j--)
{
区间[j]=区间[j]-区间[0];
}
}
公共无效btnClick()
{
k++;
k=k%2;
startSong(k);
}
私家空星(国际一){
如果(i==1){
系统输出打印项次(“11111”+i);
btnplay.setImageResource(R.drawable.pause);
试一试{
System.out.println(“开始尝试检查------”);
mediaPlayer.start();
}捕获(例外e){
mediaPlayer.pause();
}
}
如果(i==0){
btnplay.setImageResource(R.drawable.play);
mediaPlayer.pause();
系统输出打印项次(“00000”+i);
}
}

您不应该这样做:

handler.dispatchMessage(handler.obtainMessage());
请尝试以下方法:

handler.sendMessage(handler.obtainMessage());
编辑:添加了我注意到的其他内容

我还看到在线程中有一个循环
while(isDownloading)
,并且在
finally
块中将
isDownloading
设置为
false
。此循环不会运行超过一次

你也是

btnplay.setImageResource(R.drawable.play);

在一个房间里。这不好。您需要在主(UI)线程上执行与UI相关的所有操作。

请添加一些调试日志,以便您可以判断Runnable是否运行多次,以及是否在调试时调用了handleMessage()方法,然后一切正常,但当我运行同一段代码时,文本不会更新。P