Quiero mostrar una rueda giratoria de diálogo, mientras que mi aplicación de las cargas de algunos datos:

Mostrar la rueda de hilado de diálogo, mientras que la carga de datos en Android

La rueca de diálogo debe mostrar en un clic de botón. Estoy utilizando el siguiente código pero no muestran la rueca. ¿Cuál podría ser el problema?

public void CheckAccount(String username, String password) {
    try {

        final ProgressDialog progDailog = ProgressDialog.show(this,
            "Progress_bar or give anything you want",
            "Give message like ....please wait....", true);
        new Thread() {
            public void run() {
                try {
                    //sleep the thread, whatever time you want. 
                    sleep(1000);
                } catch (Exception e) {
                }
                progDailog.dismiss();
            }
        }.start();

        //getting data code here
        //getting data code here
        //getting data code here
        //getting data code here
        //getting data code here

    } catch (Exception e) {
        Log.e(LOG_TAG, e.getMessage());
        PopIt("CheckAccountError", e.getMessage(), "Denied");
    }
}
InformationsquelleAutor Kris | 2011-05-28

3 Comentarios

  1. 49

    Así, y viendo que esta respuesta se está volviendo más y más upvotes, he decidido que debo tomar a mí mismo para mejorar la calidad de la respuesta. Como me veo en el original, yo no veo ninguna verdadera «respuesta» a la pregunta de «¿cuál es el problema en mi código?». Dejo la respuesta original intacto abajo para preservar la vinculación, que es lo que estoy suponiendo que ha causado las respuestas popularidad.

    Respuesta Actualizada

    Es probable que usted está violando el ‘hilo único modelo’. La interfaz de usuario Android kit de herramientas no es seguro para subprocesos, y sólo debe ser manipulado desde el ‘principal’ subproceso de interfaz de usuario. Android tiene un puñado de métodos útiles que puede utilizar para asegurarse de que su interfaz de usuario manipulaciones se realizan en el subproceso de interfaz de usuario. La mayoría de los detalles de estas llamadas de método se puede encontrar en el Android Indoloro Roscado blog (enlace en la palabra » uno » a continuación, y aquí para una referencia rápida).

    Mirando el código, la violación específica que veo es que un ProgressDialog está siendo creado en lo que es probable que el subproceso de interfaz de usuario, que es desestimado en el recién creado fondo de la rosca.

    Mejor encapsulación de su fondo método en un Runnable y el uso de Ver#post(Runnable) para hacer el trabajo en el fondo.

    Recuerde, hay muchas maneras de hacer de fondo, así que echa un vistazo a lo que está disponible, y el uso de lo que es correcto para su situación.

    Respuesta Original

    Tomar un buscar en uno de la muchos tutoriales de cómo hacer asincrónica trabajo en Android.

    También, aquí están algunas otras StackOverflow preguntas que son similares

    Cuadro de diálogo de progreso problema en Android

    Cuadro de Diálogo de progreso en la actividad abierta

    Cuadro de Diálogo de progreso aunque el inicio de la nueva actividad

    Android: Diálogo de Progreso de la ruleta no gira

    La actualización de los avances de diálogo

    android: muestra un cuadro de diálogo de progreso

    • Perfecto referencias, muchas gracias @nicolás! 🙂
    • el amor al uso de referencia, +1 🙂
  2. 41

    A crear.

    ProgressDialog dialog = new ProgressDialog(this); //this = YourActivity
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialog.setTitle("Loading");
    dialog.setMessage("Loading. Please wait...");
    dialog.setIndeterminate(true);
    dialog.setCanceledOnTouchOutside(false);

    Para mostrar.

    dialog.show();

    A despedir.

    dialog.dismiss();
    • Trabajó como un encanto. Sin embargo, ¿cómo evitar que una vez que los datos han sido cargados?
    • Para ocultar el cuadro de diálogo llamada dialog.dismiss();
    • ProgressDialog está en desuso y es probable que sea eliminado en futuras iteraciones de Android
  3. 1

    He tenido el problema de la conmutación entre las dos actividades, la Actividad y la Actividad B. Actividad B tenía tiempo de ejecución de tareas que fue la actualización de la interfaz de usuario, así que no era un candidato para el AsyncTask. Lo resuelto por el lanzamiento de un diálogo de progreso en la Actividad y el lanzamiento de la Actividad de B antes de acabar la primera actividad. El Código es:

                //wrap thread around original code for progress button
                final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait",
                        true, false);
                ringProgressDialog.setIndeterminate(true);
                new Thread(new Runnable() {
                    public void run() {
                        try {
    
                            Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class);
                            startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
                            startActivity(startNewActivityOpen);
                            GlobalVars.navigateFromScreen = true;
    
                            Thread.sleep(3000);
    
    
                            if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
                                ringProgressDialog.dismiss();
                            }
    
                            getActivity().finish();
    
    
                        } catch (Exception e) {
    
                        }
    
                    }
    
                }).start();

Dejar respuesta

Please enter your comment!
Please enter your name here