从asynctask调用外部方法并使用此外部方法的数据更新ProgressDialog

时间:2013-05-13 12:41:02

标签: android android-asynctask progressdialog

我有一个普遍的问题:

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

doInBackground(Void... arg0)

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

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

我已经尝试过了: 声明页面值公共和静态并从

访问它
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();
            }
}

谢谢,

2 个答案:

答案 0 :(得分:1)

onProgressUpdatepublishProgress之后调用,在您开始使用prepareFiles准备文件之前只执行一次 - 这就是为什么它不会在以后更改并显示初始值。

我相信你应该做点什么

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

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

    return null;
}

或以其他方式划分prepareFiles作业,并在加载算法的每几步调用publishProgress

答案 1 :(得分:1)