2011-07-24 13 views
6

Tengo algo de código muy simple de hacer con los manipuladores:Android, Manejador de mensajes

Handler seconds=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     bar.incrementProgressBy(5); 
     tView1.setText("r:"+msg); 
    } 
    }; 

Y mi hilo:

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 
       } 
       } 
      }); 

Como se puede ver arriba Estoy tratando de cambiar el valor de " what "en el mensaje, entonces puedo hacer cosas diferentes según el mensaje, pero de acuerdo con" tView1.setText("r:"+msg) "el valor de" what "no cambia a 5 :(
solo muestra" what=0 "

¿Cómo cambio los valores de Mensaje para que pueda hacer cosas diferentes según el mensaje?

Gracias!

Respuesta

7

Debe obtener los datos del mensaje (como Bundle entonces como int) que ha enviado en el manejador que hacer:

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)); 
    } 
    }; 
+0

Lea un poco sobre 'Bundle' para su segunda pregunta para sus propios parámetros http://developer.android.com/reference/android/os/ Bundle.html Es un concepto simple de obtener. (Par de clave y valor) –

+1

¡Eso funcionó perfectamente! ¡Gracias! – Ryan

+0

La forma en que explicaste el concepto era fácil de entender, cuando hice clic en ese enlace y llegó a "paquetes" y lo que no, pasó algo por mi cabeza :( – Ryan

2

Hay que extraer el mensaje de la misma manera que lo tienes:

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

Lo siento por no aclarar que en la respuesta anterior ...

P. S. No hice caso de la comprobación de nula por razones de simplicidad, pero usted debe comprobar si data es nulo ...

+0

¡Uy, aceptó lo de arriba y vio su respuesta, lo expresó! ¡Gracias! – Ryan

+0

Eso no me importa :) ¡disfruta de Android! – MByD

+1

¡Gracias de nuevo! Es por gente útil como usted. Tengo la oportunidad de "disfrutar de Android" :) – Ryan

Cuestiones relacionadas