¿Cómo puedo enviar el mensaje al encargado de una función estática?

Lo sé, esta es otra vez una pregunta repetida, pero mi caso es cuestión diferente.

Tengo una clase abc con una función estática y un manejador. Anteriormente no podía llamar a manejador de una función estática. Entonces i googled para el acceso de una función no estática de una función estática y encontró una solución es crear una instancia de la clase y acceder a la variable no estática. Pero ahora, por qué, estoy recibiendo este error.

E/AndroidRuntime(13343): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

 public class abc { static public void Instantiate() { abc xyz = new abc(); xyz.handler.sendEmptyMessage(1); **//GETTING ERROR IN THIS LINE** } public Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { } } } } 

Mi pregunta: ¿Cómo puedo enviar mensaje al manejador desde una función estática?

Gracias

Compruebe el lugar donde está haciendo esto:

 abc.Instantiate(); 

Y reemplácelo por

 runOnUiThread(new Runnable() { @Override public void run() { abc.Instantiate(); } }); 

Espero que lo esté llamando desde una actividad

Alguna Explicación ( citando bicska88) 🙂


Lo que causa el problema, no tiene nada que ver con el hecho de que envíe un mensaje a un objeto Handler desde una función estática. El problema es que envía un mensaje al controlador de un subproceso que no ha llamado Looper.prepare() (como indica el mensaje de error, el subproceso no tiene un message loop ). Esto se puede arreglar llamando explícitamente Looper.prepare() antes o mientras ejecuta el código en el UIThread.


Intente definir el manejador como

 final static Handler handler = new Handler() { ... }; 

Lo que causa el problema, no tiene nada que ver con el hecho de que envíe un mensaje a un objeto Handler desde una función estática. El problema es que envía un mensaje al controlador de un subproceso que no ha llamado Looper.prepare() (como indica el mensaje de error, el subproceso no tiene un message loop ). Para solucionar esto, haga lo siguiente:

 public class abc { public Handler handler; static public void Instantiate() { abc xyz = new abc(); Looper.prepare(); handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { } } } xyz.handler.sendEmptyMessage(1); Looper.loop(); } } 

La documentación se puede encontrar en este enlace.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.