我有一个普遍的问题:
是否可以使用来自方法的数据更新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();
}
}
谢谢,
答案 0 :(得分: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
。
答案 1 :(得分:1)