对于处理程序,我有一些非常简单的代码:
Handler seconds=new Handler() {
@Override
public void handleMessage(Message msg) {
bar.incrementProgressBy(5);
tView1.setText("r:"+msg);
}
}; 我的帖子是:
Thread seconds_thread=new Thread(new Runnable() {
public void run() {
try {
for (int i=0;i<20 && isRunning.get();i++) {
Thread.sleep(1000);
Message m = new Message();
Bundle b = new Bundle();
b.putInt("what", 5); // for example
m.setData(b);
seconds.sendMessage(m);
}
}
catch (Throwable t) {
// just end the background thread
}
}
}); 正如您在上面看到的,我正在尝试更改消息中"what“的值,以便可以根据消息执行不同的操作,但根据"tView1.setText("r:"+msg)”,"what“的值不会更改为5 :(
它只显示"what=0“
如何更改消息的值,以便可以根据消息执行不同的操作?
谢谢!
发布于 2011-07-24 11:50:19
您必须从您在处理程序中发送的消息(作为Bundle,然后作为int)中获取数据:
Handler seconds=new Handler() {
@Override
public void handleMessage(Message msg) {
int sentInt = msg.getData().getInt("what");
bar.incrementProgressBy(5);
tView1.setText("r:"+Integer.toString(sentInt));
}
}; 发布于 2011-07-24 11:50:17
您需要以与获取消息相同的方式提取消息:
public void handleMessage(Message msg) {
bar.incrementProgressBy(5);
Bundle data = msg.getData();
tView1.setText("r:"+data.getInt("what"));
} 很抱歉在前面的回答中没有澄清这一点...
附注:为了简单起见,我忽略了对null的检查,但您应该检查data是否为null...
https://stackoverflow.com/questions/6804788
复制相似问题