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