ProgressDialog en AsyncTask

Estoy intentando exhibir un progressdialog personalizado mientras que carga la alimentación de rss del servidor del HTTP, hice una búsqueda dura, pero nada me ayudó a hacer esto, la única cosa que sé es que la solución debe utilizar AsyncTask, pero soy confuso sobre Los parámetros para pasar a este AsyncTask. Aquí está mi actividad:

import java.util.ArrayList; import java.util.List; import com.cyberesa.info.BaseFeedParser; import com.cyberesa.info.Message; import com.cyberesa.info.MessageListAdapter; import com.cyberesa.info.R; import android.app.ListActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class Soirees extends ListActivity { private List<Message> messages; private TextView tvSorties; private MyProgressDialog dialog; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.sorties); tvSorties=(TextView)findViewById(R.id.TVTitle); tvSorties.setText("Programme des soirées"); loadFeed(); } private void loadFeed(){ try{ BaseFeedParser parser = new BaseFeedParser(); messages = parser.parse(); List<Message> titles = new ArrayList<Message>(messages.size()); for (Message msg : messages){ titles.add(msg); } MessageListAdapter adapter = new MessageListAdapter(this,titles); this.setListAdapter(adapter); adapter.notifyDataSetChanged(); } catch (Throwable t){ Log.e("ImageLoader",t.getMessage(),t); } } } 

¿Puedes ayudarme a agregar AsyncTask a esto?

Gracias, Houssem

 /** * this class performs all the work, shows dialog before the work and dismiss it after */ public class ProgressTask extends AsyncTask<String, Void, Boolean> { public ProgressTask(ListActivity activity) { this.activity = activity; dialog = new ProgressDialog(activity); } /** progress dialog to show user that the backup is processing. */ private ProgressDialog dialog; /** application context. */ private ListActivity activity; protected void onPreExecute() { this.dialog.setMessage("Progress start"); this.dialog.show(); } @Override protected void onPostExecute(final Boolean success) { if (dialog.isShowing()) { dialog.dismiss(); } MessageListAdapter adapter = new MessageListAdapter(activity, titles); setListAdapter(adapter); adapter.notifyDataSetChanged(); if (success) { Toast.makeText(context, "OK", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "Error", Toast.LENGTH_LONG).show(); } } protected Boolean doInBackground(final String... args) { try{ BaseFeedParser parser = new BaseFeedParser(); messages = parser.parse(); List<Message> titles = new ArrayList<Message>(messages.size()); for (Message msg : messages){ titles.add(msg); } activity.setMessages(titles); return true; } catch (Exception e) Log.e("tag", "error", e); return false; } } } public class Soirees extends ListActivity { private List<Message> messages; private TextView tvSorties; private MyProgressDialog dialog; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.sorties); tvSorties=(TextView)findViewById(R.id.TVTitle); tvSorties.setText("Programme des soirées"); // just call here the task AsyncTask task = new ProgressTask(this).execute(); } public void setMessages(List<Message> msgs) { messages = msgs; } } 

Corregido moviendo los modificadores de vista a onPostExecute para que el código fijo sea:

 public class Soirees extends ListActivity { private List<Message> messages; private TextView tvSorties; //private MyProgressDialog dialog; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.sorties); tvSorties=(TextView)findViewById(R.id.TVTitle); tvSorties.setText("Programme des soirées"); new ProgressTask(Soirees.this).execute(); } private class ProgressTask extends AsyncTask<String, Void, Boolean> { private ProgressDialog dialog; List<Message> titles; private ListActivity activity; //private List<Message> messages; public ProgressTask(ListActivity activity) { this.activity = activity; context = activity; dialog = new ProgressDialog(context); } /** progress dialog to show user that the backup is processing. */ /** application context. */ private Context context; protected void onPreExecute() { this.dialog.setMessage("Progress start"); this.dialog.show(); } @Override protected void onPostExecute(final Boolean success) { List<Message> titles = new ArrayList<Message>(messages.size()); for (Message msg : messages){ titles.add(msg); } MessageListAdapter adapter = new MessageListAdapter(activity, titles); activity.setListAdapter(adapter); adapter.notifyDataSetChanged(); if (dialog.isShowing()) { dialog.dismiss(); } if (success) { Toast.makeText(context, "OK", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "Error", Toast.LENGTH_LONG).show(); } } protected Boolean doInBackground(final String... args) { try{ BaseFeedParser parser = new BaseFeedParser(); messages = parser.parse(); return true; } catch (Exception e){ Log.e("tag", "error", e); return false; } } } } 

@ Vladimir, thx su código fue muy útil.

AsyncTask es muy útil!

 class QueryBibleDetail extends AsyncTask<Integer, Integer, String>{ private Activity activity; private ProgressDialog dialog; private Context context; public QueryBibleDetail(Activity activity){ this.activity = activity; this.context = activity; this.dialog = new ProgressDialog(activity); this.dialog.setTitle("查询经文"); this.dialog.setMessage("正在查询:"+tome+chapterID+":"+sectionFromID+"-"+sectionToID); if(!this.dialog.isShowing()){ this.dialog.show(); } } @Override protected String doInBackground(Integer... params) { Log.d(TAG,"经文doInBackground"); publishProgress(params[0]); if(sectionFromID > sectionToID){ return ""; } String queryBible = "action=query_bible&article="+chapterID+"&id="+tomeID+"&verse_start="+sectionFromID+"&verse_stop="+sectionToID+""; try{ String bible = (Json.getRequest(HOST+queryBible)).trim(); bible = android.text.Html.fromHtml(bible).toString(); return bible; }catch(Exception e){ e.printStackTrace(); } return null; } @Override protected void onPostExecute(String bible){ Log.d(TAG,"经文onPostExecute"); TextView bibleBox = (TextView) findViewById(R.id.bibleBox); bibleBox.setText(bible); this.dialog.dismiss(); } } 

Hace un par de días encontré una solución muy buena de este problema. Lea sobre esto aquí . En dos palabras Mike creó un AsyncTaskManager que media ProgressDialog y AsyncTask. Es muy fácil usar esta solución. Sólo tiene que incluir en su proyecto varias interfaces y varias clases y en su actividad escribir un código simple y anidar su nuevo AsyncTask de BaseTask. También le aconsejo que lea los comentarios porque hay algunos consejos útiles.

Han pasado algunos años desde que se hizo esta pregunta (y ya que alguien ha publicado una respuesta). Desde entonces, ProgressDialog estaba obsoleto en el nivel API O, según la documentación oficial de Android. Como tal, puede considerar el uso de una barra de progreso en línea en lugar de un ProgressDialog como sugieren los autores de la documentación.

Esta pregunta ya está contestada y la mayoría de las respuestas aquí son correctas, pero no resuelven un problema importante con los cambios de configuración. Eche un vistazo a este artículo https://androidresearch.wordpress.com/2013/05/10/dealing-with-asynctask-and-screen-orientation/ si desea escribir una tarea asíncrona de una mejor manera.

  • Diálogo de progreso para AsyncTask - Android
  • ¿Cómo implementar un ProgressDialog mientras que Activity solicita un SoapObject desde un Servicio Web?
  • Quiero un círculo de progreso en lugar de un diálogo de progreso
  • Botón de retroceso de Android y cuadro de diálogo de progreso
  • Temporizador de cuenta atrás Android La barra de progreso circular no coincide con el temporizador
  • Pasar argumentos a AsyncTask y devolver resultados
  • show ProgressBar o Dialog de un IntentService para el progreso de la descarga
  • Android seekbar establecer estilo personalizado con nueve imágenes de parche
  • Mostrar / ocultar ProgresBar en ActionBar en android API inferior a 11
  • Mostrar diálogo de progreso dentro de DialogFragment
  • El indicador de progreso indeterminado ActionBarSherlock no desaparecerá en el simulador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.