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