Android,Handler消息传递

7

我有一些与处理程序相关的非常简单的代码:

 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

我该如何更改消息的值,以便根据消息执行不同的操作?

谢谢!

2个回答

7

你必须从你在处理程序中发送的消息(作为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));
    } 
  }; 

针对你的第二个问题,阅读一些关于Bundle的内容,以了解自己的参数。http://developer.android.com/reference/android/os/Bundle.html 这是一个简单的概念(键值对)。 - Nikola Despotoski
你解释这个概念的方式很容易理解,当我点开那个链接跳转到“包裹”之类的内容时,它有点超出了我的理解范围。 - Ryan
哦,试着自己做一下吧。尝试将包含您姓名的字符串和一个包含圆周率数字的双精度数发送到该处理程序中 :) 不要忘记键和值的概念。 :D - Nikola Despotoski

2
您需要以相同的方式提取消息:
public void handleMessage(Message msg) { 
  bar.incrementProgressBy(5); 
  Bundle data = msg.getData();
  tView1.setText("r:"+data.getInt("what"));
} 

之前的回答没有澄清这一点,对不起...

另外,为了简单起见,我忽略了检查 null 的情况,但你应该检查 data 是否为空...


抱歉,我接受了上面的回答并且已经点赞了!谢谢! - Ryan
那对我来说无所谓 :) 享受安卓吧! - MByD
1
再次感谢!正是因为像你这样乐于助人的人,我才有机会“享受安卓” :) - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接