难以在异步任务中更改进度对话框的消息

时间:2012-01-30 11:27:17

标签: android android-asynctask

我创建了一个异步任务,并希望在doBackground的不同阶段更改进度对话框的消息。这是代码:

public class sc extends AsyncTask<Integer,String,Void>
    {
        ProgressDialog dialog;
        protected void onPreExecute()
        {
            dialog=new ProgressDialog(Loc.this);
            dialog.show();
        }
        @Override
        protected Void doInBackground(Integer... params) 
        {

            onProgressUpdate("Contacting server..Please wait..");
            //Do some work
            onProgressUpdate("Processing the result");
            //Do some work
            onProgressUpdate("Calculating..");
            dialog.dismiss();
            return null;
        }
        protected void onProgressUpdate(String ui)
        {
            dialog.setMessage(ui);
        }


}

但问题是,进度对话框只显示第一条消息。请帮我找一个解决方案。

3 个答案:

答案 0 :(得分:8)

protected Void doInBackground(Integer... params) 
{
    onProgessUpdate("Contacting server..Please wait..");
    ...
}

Urrrm,不,不行。

...试

publishProgress("Contacting server..Please wait..");

您必须在doInBackground(..)中“发布”您的进度才能调用onProgressUpdate(...)

另请勿在{{1​​}}中致电dialog.dismiss()而是在doInBackground(...)中调用它。

答案 1 :(得分:3)

我认为应该是......

publishProgress("Your Dialog message..");

不是

onProgessUpdate("Processing the result"); 
doInBack中的

..()

类似的东西,

protected Long doInBackground(URL... urls) {
      publishProgress("Hello");
     return null;
 }

 protected void onProgressUpdate(String msg) {
     dialog.setMessage(msg);

 }

答案 2 :(得分:0)

问题可能还在于您没有设置“初始消息”。如果您在ProgressDialog内尝试执行此操作之前没有为onProgressUpdate设置消息,则无法使用。

ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Title");
progressDialog.setMessage("Initial message needed");

public class foo extends AsyncTask<Void,Integer,Void> {
    ...
}

另请注意,如果您需要进度更新和消息,则可以使用Integer变量参数,其中一个整数定义进度,另一个将消息定义为{{1}的索引。消息数组(如果事先知道消息)。