У меня проблема с AsyncTask
.Wait 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});
Заранее спасибо
Возможно, настройка представления содержимого диалогового окна перед его отображением поможет – damian
Нет, это исключает. Это должно быть так. Диалог работает, я использую его в другом месте в моем приложении. – Bernie
какое исключение выбрано – damian