我有一个问题AsyncTask
。
我通过调用 webService 来更新对象列表。在此期间,我想显示一个ProgressDialog
. 然后,当列表完全更新时,我也希望关闭对话框和 AsyncTask。
问题是 UIThread 不等待AsyncTask
完成。我看到该get()
方法可以为我工作,但是有了它, UIThread 只是被阻止了,并且对话框没有显示。
我想知道如何在显示 ProgressDialog 时设法等待任务完成。
这是我的 AsyncTask 类:
public class MyAsyncTask extends AsyncTask<Integer, Void, Boolean>{
private ProgressDialog pd;
private String m_sShelfCode;
private String m_sFamiliyCode;
public MyAsyncTask(String shelfCode, String familyCode) {
this.m_sShelfCode = shelfCode;
this.m_sFamiliyCode = familyCode;
}
@Override
protected void onPreExecute() {
AppManager app = AppManager.getInstance();
LayoutInflater inflater = (LayoutInflater)app.m_AppContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout rl = (RelativeLayout)inflater.inflate(R.layout.progress_dialog, null, false);
pd = new ProgressDialog(app.m_AppContext);
pd.requestWindowFeature(Window.FEATURE_NO_TITLE);
pd.setCancelable(false);
pd.show();
pd.setContentView(rl);
}
@Override
protected Boolean doInBackground(Integer... params) {
Log.d("DO IN BACKGROUND","param[0]="+params[0]);
switch (params[0]) {
case AppManager.SHELF_LIST:
//Calling WebService
SoapShelf s = new SoapShelf();
try {
ArticleListFragment.m_ShelfList = s.getShelfList();
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (XmlPullParserException e) {
e.printStackTrace();
return false;
}
break;
case AppManager.FAMILY_LIST:
// set family list
break;
case AppManager.ARTICLE_LIST:
// set article list
break;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
pd.dismiss();
if (result == false)
;// error dialog
}
}
我在这里在我的 ArticleListFragment 中调用它
public void getItemList(int listType) {
switch (listType) {
case AppManager.SHELF_LIST:
new MyAsyncTask(null, null).execute(new Integer[]{AppManager.SHELF_LIST});
提前致谢