2011-08-25 10 views
7

Obtengo un Runtime Exception:Can't create handler inside thread that has not called Looper.prepare() while displaying the Toast message en un hilo de trabajo.Error al mostrar un mensaje de Toast: No se puede crear el controlador en el hilo que no ha llamado a Looper.prepare()

Tengo un servicio (se ejecuta en un proceso remoto) que crea un objeto. Este objeto es responsable de conectarse a un servidor en un hilo. Recibo la respuesta del servidor. Quiero mostrar el mensaje del servidor en el brindis. En ese momento obtengo esta excepción. Intenté publicarlo en un controlador utilizando handler.post. Pero aún estoy recibiendo la excepción.

¿Cuál debería ser el enfoque para evitar esto.

+0

[Mira esta] (http://www.google.com/search?client=ubuntu&channel=fs&q=that+has+not+called+Looper.prepare%28%29&ie=utf-8&oe= utf-8) –

+0

pon tu código de servicio –

Respuesta

15

definir un controlador de esta manera:

private final Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
       if(msg.arg1 == 1) 
        Toast.makeText(getApplicationContext(),"Your message", Toast.LENGTH_LONG).show(); 
     } 
    } 

a continuación, poner el siguiente código donde tiene que mostrar su mensaje de aviso emergente.

Message msg = handler.obtainMessage(); 
msg.arg1 = 1; 
handler.sendMessage(msg); 
+1

Gracias a esta solución de jainal funcionó :-) Había intentado esta solución antes, pero estaba creando el controlador en el hilo. Ahora cambié la posición en la que funcionó :-) –

+0

compruebe esta biblioteca 'compile 'com.shamanland: xdroid-toaster: 0.0.5'', no requiere la variable' runOnUiThread() 'o' Context', toda la rutina es ¡ido! solo invoque 'Toaster.toast (R.string.my_msg);' aquí está el ejemplo: https://github.com/shamanland/xdroid-toaster-example –

Cuestiones relacionadas