ProgressDialog in AsyncTask ProgressDialog in AsyncTask android android

ProgressDialog in AsyncTask


/** * 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;   }}


Fixed by moving the view modifiers to onPostExecute so the fixed code is :

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 your code was very helpful.


AsyncTask is very helpful!

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();        }    }