No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en CountDownTimer

Tengo un servicio. Y hay un método llamado onServiceUpdate (). Este método es similar a onLocationChanged () en la API de Google Maps.

Así que quiero iniciar CountDownTimer dentro de método onServiceUpdate (), pero mostrando un error como este:

Can't create handler inside thread that has not called Looper.prepare() java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.os.CountDownTimer$1.<init>(CountDownTimer.java:114) at android.os.CountDownTimer.<init>(CountDownTimer.java:114) at skripsi.ubm.studenttracking.Service2$6.<init>(Service2.java:317) at skripsi.ubm.studenttracking.Service2.onServiceUpdate(Service2.java:317) 

Este es mi código:

  @Override public void onServiceUpdate(ServiceState state) { final float[] distance = new float[2]; Location.distanceBetween(state.getGeoPoint().getLatitude(), state.getGeoPoint().getLongitude(), 6.130607787619352,106.81839518499267, distance); if (distance[0] > 25.0) { CountDownTimer cdt5 = new CountDownTimer(total_onServiceUpdate,1000) { @Override public void onTick(long millisUntilFinished) { total_onServiceUpdate = millisUntilFinished/1000; } @Override public void onFinish() { sendSMS(); stopSelf(); } }.start(); } 

4 Solutions collect form web for “No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en CountDownTimer”

El onServiceUpdate () es una tarea aysnchronous que se ejecuta y le notifica, por lo tanto es un hilo de fondo. Todo lo que necesitas hacer es llamar a timer.start (); Desde el hilo principal, el servicio en realidad se ejecuta en el hilo principal, es intentService que no lo hace, su solución está a lo largo de los caminos de

 new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { CountDownTimer cdt5 = new CountDownTimer(total_onServiceUpdate,1000) { @Override public void onTick(long millisUntilFinished) { total_onServiceUpdate = millisUntilFinished/1000; } @Override public void onFinish() { sendSMS(); stopSelf(); } }.start(); } }); 

Ahora puede continuar señor. Siempre llame a los códigos de la coqueta con la pantalla en el Looper principal

Espero eso ayude

Creo que el problema es que en tu sendSMS () estás intentando hacer algo que requiere UIThread (como actualizar una vista). Prueba esto:

 Handler mHandler = new Handler() { public void handleMessage(Message msg){ sendSMS(); }}; 

Modifique el método onFinish para

 @Override public void onFinish() { mHandler.sendEmptyMessage(0); stopSelf(); } 

No puede actualizar una actividad gui de un servicio a través de un controlador porque el controlador tiene que crearse en el subproceso gui.

En su lugar, tiene que enviar una emisión de su servicio e implementar un receptor de difusión local en la actividad que recibe esta transmisión

Android:

Intente esto antes de llamar a un manejador

If (Looper.MyLooper () == null) {Looper.Prepare (); }

  • Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero sólo se ejecuta de 8:00 AM a 18:00 PM?
  • Android - ¿Cómo decidir si ejecutar un servicio en un proceso separado?
  • Diseño de hilos múltiples de Android Service
  • Temporizador La tarea deja de ejecutarse después de un tiempo indefinido en android
  • IOS equivalente al servicio de Android?
  • Cómo pasar valor de cadena de servicio a la actividad en android?
  • Depurar servicio de fondo en android utilizando intelliJ
  • Cómo enlazar una actividad a un servicio y controlar y administrar el servicio desde la actividad
  • Android - widget de actualización sobre el servicio con datos de la red. ¿El mejor enfoque?
  • Android: Cómo detener el servicio de música de mi aplicación, si otra aplicación reproduce música.
  • Eventos de apagado en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.