2011-08-23

[Android] AsyncTask with ProgressDialog

寫完一個從網路上抓去JSONArray , 然後將資料秀在 ListView 的一個示範程式. 想要在裡面加裝 ProgressDialog 顯示畫面, 當程式正在跟Web Server Request Data.
[失敗Code]
1. 在 MyActivity 內定義一個ProgressDialog. 在AsyncTask.doInBackground 內呼叫
mDialog = ProgressDialog.show(MyActivity.this, "Progress Title","Progress Message", true);
2. 在 AsyncTask.onPostExecute
mDialog.dismiss();

這種方法, 程式在模擬器中, 會死在 mDialog.dismiss() 那一行, 整個應用程式會關閉.

[修正版]
1. 將ProgressDialog 移往 AsyncTask 中定義, 不定義在 MyActivity 中.
2. 增加 AsyncTask 建構式, 將 mDialog 初始化放在裡面.
mDialog = new ProgressDialog(MyActivity.this);
3. 新增 AsyncTask.onPreExecute()
this.mDialog.setTitle("Progress Title");
this.mDialog.setMessage("Progress Message");
this.mDialog.setCancelable(true);
this.mDialog.show();
4. 在 AsyncTask.onPostExecute() 內新增
if(mDialog.isShowing()) mDialog.dismiss();

這樣作法式可以運作的.

參考資料
1. progressDialog in AsyncTask

沒有留言:

張貼留言