1

我的应用程序在 AsyncTask 中的进度对话框有问题:我AsyncTask正在从 Internet 中获取一些数据doInBackGround(),我正在开始进度对话框,在onPreExecute()中完成对话框 onPostExecute()

单击按钮时,我执行此 asyncTask。第一次单击此按钮(发生长时间操作)时,未显示进度对话框。但下次进度对话框会正常显示。

第一次运行AsyncTask时没有显示进度对话框可能是什么问题?

这是 onClick 方法:

public void onClickFind(View view){
 new Task_Search().execute();
}

这是任务Task_Search

private class Task_Search extends AsyncTask<Void, Void, Void> {

 @SuppressWarnings("deprecation")
 protected void onPreExecute() {
  showDialog(DIALOG_TASKING);
 }

 protected Void doInBackground(Void... unused) {
  //some geting of web content here
 }

 @SuppressWarnings("deprecation")
 protected void onPostExecute(Void unused) {
  dismissDialog(DIALOG_TASKING);
 }
}

进度对话框定义在MainActivity

@SuppressWarnings("deprecation")
@Override
protected Dialog onCreateDialog(int id) {
 switch (id) {
 case DIALOG_TASKING:
  mSearchDialog = new ProgressDialog(this);
  mSearchDialog.setMessage("Searching for field number..");
  mSearchDialog.setCancelable(true);
  return mSearchDialog;
  }
 return super.onCreateDialog(id);
}

在使用之前,AsyncTask我使用单独的线程来下载数据:在onClick,我先启动progressDialog然后线程,当线程完成时也progressDialog停止,行为是相同的:第一次单击按钮对话框没有显示,下一次显示。

有谁能帮忙吗?

4

3 回答 3

0

好的,我在 MainActivity 中创建了我自己的方法:

public void showProgressDialog() {
 if (mProgressDialog == null) {
  mProgressDialog = new ProgressDialog(this);
  mProgressDialog.setMessage("Searching for field number..");
  mProgressDialog.show();
  return;
 }else{
  mProgressDialog.setMessage("Searching for field number..");
  mProgressDialog.show();
  return;
 }

}

还:

public void closeProgressDialog() {
 if (mProgressDialog != null) {
  mProgressDialog.dismiss();
 }
 return;
}

我改变了 AsyncTask 如下:

private class Task_Search extends AsyncTask<Void, Void, Void> {
 protected void onPreExecute() {
  // showDialog(DIALOG_TASKING);
  showProgressDialog();
 }

 protected Void doInBackground(Void... unused) {
 //Some long duration stuff here
 }

 protected void onPostExecute(Void unused) {
  //dismissDialog(DIALOG_TASKING);
  closeProgressDialog();
 }
}

mProgressDialog是 MainActivity 的私有成员

private ProgressDialog mProgressDialog;

情况是一样的:点击按钮:第一次 ProgressDialog 卡住了,下次它工作完美

于 2012-11-07T16:04:36.363 回答
0

我看不到您在对话框中调用 show()。

代替

@SuppressWarnings("deprecation")
protected void onPreExecute() {
    showDialog(DIALOG_TASKING);
}

@SuppressWarnings("deprecation")
protected void onPreExecute() {
    showDialog(DIALOG_TASKING).show();
}
于 2012-11-07T15:29:23.103 回答
0

不要调用 showDialog insode onPreExecute()。AsyncTask 提供 publishProgress() 方法,可以从 doInBackground() 调用该方法以在 UI 线程上发布更新。

于 2012-11-07T15:30:32.623 回答