Android, Обработчик сообщений - PullRequest
6 голосов
/ 24 июля 2011

У меня есть очень простой код для работы с обработчиками:

 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 голосов
/ 24 июля 2011

Вы должны получить данные из сообщения (как 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));
    } 
  }; 
2 голосов
/ 24 июля 2011

Вам нужно извлечь сообщение так же, как вы его получили:

public void handleMessage(Message msg) { 
  bar.incrementProgressBy(5); 
  Bundle data = msg.getData();
  tView1.setText("r:"+data.getInt("what"));
} 

Извините, что не уточнили, что в предыдущем ответе ...

PS Я проигнорировал проверку на нольдля простоты, но вы должны проверить, является ли data нулевым ...

...