2011-03-05 19 views

Respuesta

60

Debe cargar los datos en un AsyncTask y actualizar su interfaz cuando los datos terminen de cargarse

Incluso podría iniciar una nueva actividad en el método onPostExecute() de su AsyncTask.

Más específicamente, se necesita una nueva clase que se extiende AsyncTask:

public class MyTask extends AsyncTask<Void, Void, Void> { 
    public MyTask(ProgressDialog progress) { 
    this.progress = progress; 
    } 

    public void onPreExecute() { 
    progress.show(); 
    } 

    public void doInBackground(Void... unused) { 
    ... do your loading here ... 
    } 

    public void onPostExecute(Void unused) { 
    progress.dismiss(); 
    } 
} 

Luego, en su actividad puede hacer:

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Loading..."); 
new MyTask(progress).execute(); 
+0

Muchas gracias :) Tu respuesta funcionó. – Neha

+0

Hola, gracias por la respuesta, estoy haciendo exactamente esto, pero por alguna razón el progresoDialog aparece cuando el teléfono está en orientación horizontal pero no cuando está en orientación vertical. ¿Tienes alguna idea sobre esto? He intentado iniciar el diálogo desde la primera clase (la que llama a myTask) pero sigue teniendo el mismo problema. A veces, el diálogo funciona en modo vertical pero se ve fuera de foco y esto ocurre una sola vez en 10 intentos. – Art

2

Cuando inicia un proceso de larga ejecución en Android, siempre es aconsejable hacerlo en otro hilo. A continuación, puede usar la secuencia de la interfaz de usuario para mostrar un cuadro de diálogo de progreso. No puede mostrar un diálogo de progreso en el mismo subproceso (UI) en el que se está ejecutando el proceso.

hacer lo siguiente para iniciar el proceso de

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait..."); 
Thread t = new Thread(this); 
t.start(); 

Para esta actividad se debe aplicar Ejecutable de la siguiente manera

public class SyncDataActivity extends Activity implements Runnable 

Y finalmente un método para llevar a cabo el proceso de larga ejecución

@Override 
public void run() { 
     //your code here 
} 
+0

Si usa subprocesos, debe administrar varias cosas, como ejecutar código post-tarea en el subproceso de interfaz de usuario. –

+0

Matthew ... ¿Puedes establecerDaemon en true en AsyncTask? – JAL

+0

Hola, lo intenté como ustedes dijeron, pero todavía no está funcionando. Estoy publicando mi código a continuación. ¿Alguien puede decir por favor que estoy haciendo mal? – Neha

Cuestiones relacionadas