0

我有一个普遍的问题:

是否可以使用来自方法的数据更新 ProgressDialog 消息,该方法由 AsyncTask 调用

doInBackground(Void... arg0)

目的:该方法是生成并返回一个文件。根据数据量,这可能会持续或多或少的时间。我想通知用户进度,告诉生成文件的当前页码(页码是外部方法内的值)。

任何建议如何访问该值并在 ProgressDialog 中显示它?

我已经尝试过:声明页面值public 和 static并从

onProgressUpdate(

页面值下方的代码返回其初始值,但是它没有更新任何想法以获得更新的值?:

    public class prepareFile extends AsyncTask<String, String, String> {

    @Override
    protected void onProgressUpdate(String... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
        progressDialog.setMessage(getResources().getString(
                R.string.CalcGatheringInformation)+"\n"+Filehandler.pages+"  -  "+values);
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        publishProgress(String.valueOf(Filehandler.pages));
        prepareFiles();

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        progressDialog.dismiss();
            }
}

谢谢,

4

2 回答 2

1

onProgressUpdate之后调用publishProgress并且您只执行一次,甚至在您开始准备文件之前prepareFiles- 这就是为什么它稍后不会更改并显示初始值的原因。

我相信你应该做点什么

@Override
protected String doInBackground(String... arg0) {
    // TODO Auto-generated method stub

    while(!allPagesPrepared()){
        publishProgress(String.valueOf(Filehandler.pages));
        preparePage();
    }

    return null;
}

prepareFiles或以其他方式划分工作并调用publishProgress加载算法的每几个步骤。

于 2013-05-13T12:55:02.377 回答
1

你可以参考这个链接:一个非常简单的例子

http://eliasbland.wordpress.com/2011/03/11/an-example-of-how-to-run-a-background-task-and-report-progress-in-the-status-bar-using- asynctask-on-android/

于 2013-05-13T13:14:56.870 回答