No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en el diálogo de diálogo de alerta

Me dieron un error en mi actividad de salpicaduras cuando se comprobó la conexión a Internet y no hay internet .. sucedió en mi diálogo de alerta, tal vez.

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.app.Dialog.<init>(Dialog.java:108) at android.app.Dialog.<init>(Dialog.java:148) at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:43) at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:95) at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:927) at com.example.study.Splash.checking(Splash.java:66) at com.example.study.Splash$2.run(Splash.java:51) 

He intentado runOnUiThread() pero todavía no funciona .. aquí está mi código de bienvenida

 package com.example.study; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import com.example.study.helper.SessionManager; import com.example.study.util.ConnectionDetector; public class Splash extends AppCompatActivity { private ConnectionDetector cd; Boolean isInternetPresent = false; protected SessionManager session; private AlertDialog.Builder builder; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); builder = new AlertDialog.Builder(Splash.this); session = new SessionManager(getApplicationContext()); cd = new ConnectionDetector(getApplicationContext()); builder.setTitle("No Connection"); builder.setMessage("Check Your Internet Connection."); builder.setIcon(R.drawable.fail); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { /* TODO Auto-generated method stub */ dialog.dismiss(); } }); Thread timer = new Thread(){ public void run(){ try { sleep(2000); } catch (Exception e) { e.printStackTrace(); } finally { checking(); } } }; timer.start(); } public void checking() { isInternetPresent = cd.isConnectingToInternet(); if(isInternetPresent) { session.checkLogin(); finish(); } else { builder.create().show(); finish(); } } } 

En Android, Looper es un sistema de colas que ejecuta un bucle de mensajes. De forma predeterminada, un Thread no tiene un Looper asociado con él cuando lo crea. Como tal, cuando su AlertDialog intenta utilizar la cola de mensajes se bloquea.

Usted podría crear un Looper en su nuevo hilo sin embargo, realmente debería estar utilizando un AlertDialog en el hilo principal. Para hacer esto, puede utilizar el método postDelayed de un Handler :

 new Handler().postDelayed( new Runnable() { @Override public void run() { checking(); } }, 2000 ); 

En su método onCreate

Como un refinamiento a la pregunta anterior, probablemente haría lo siguiente ya que la actividad de la red en el hilo de IU es también una mala idea:

Crear un controlador en el onCreate ():

 mHandler = new Handler(); 

Y todavía ejecuta checking () en su propio hilo, pero cambia ligeramente:

 public void checking() { isInternetPresent = cd.isConnectingToInternet(); if(isInternetPresent) { session.checkLogin(); finish(); } else { mHandler.post(new Runnable() { @Override public void run() { builder.create().show(); finish(); }); } } 

De esta manera, UI que hemos hecho en el hilo de la interfaz de usuario y la red se realiza en otro hilo.

  • Android-support-v4.jar no se importa correctamente en Eclipse
  • Abrir una página web en una aplicación para Android
  • ¿Por qué esta tarea de fondo falla con una excepción fatal?
  • SQLite de Android Cursor fuera de límites de excepción en SELECT count (*) FROM table
  • Longitud máxima del método PutExtra de Intención? (Cierre de la fuerza)
  • Fuente árabe no mostrada en Samsung Devices
  • ¿Cuál es la diferencia entre la clase URI y Uri?
  • Facebook integración en Android fbconnect enlace roto
  • Android AudioInputStream
  • ¿Por qué son abstractas estas funciones, dónde encontrar el cuerpo (aplicación específica) de ellas?
  • Cómo comprobar si un cuerpo casi ha dejado de moverse en libgdx + box2d
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.