【发布时间】:2013-11-21 05:26:29
【问题描述】:
有以下 AsyncTask 代码:
private class checkChangesTask extends AsyncTask<String, Void, String> {
protected ProgressDialog mProgressDialog2;
protected String _url = "", _idautor="", _idbook="";
@Override
protected void onPreExecute() {
super.onPreExecute();
this.mProgressDialog2 = new ProgressDialog(MainActivity.this);
this.mProgressDialog2.setMessage("Check changes ...");
this.mProgressDialog2.setIndeterminate(false);
this.mProgressDialog2.setCanceledOnTouchOutside(false);
this.mProgressDialog2.setCancelable(true);
this.mProgressDialog2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
this.mProgressDialog2.setMax(100);
this.mProgressDialog2.setProgress(0);
this.mProgressDialog2.show();
}
@Override
protected String doInBackground(String... params) {
Document doc = null;
String _html = "";
_idautor = params[0];
_idbook = params[1];
_url = params[2];
try {
doc = Jsoup.connect(_url).userAgent("Mozilla").get();
Elements dd = doc.select("dd");
int size = dd.size();
int p = 1;
for (Element src : dd) {
this.mProgressDialog2.setProgress(p*100/size);
if (p <= size-1){
_html += src.outerHtml();
++p;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return Jsoup.clean(_html, Whitelist.basic());
}
@Override
protected void onPostExecute(String result) {
if(!result.equals("")){
String lastfile = readPageFile(_idautor + "_" + _idbook);
if(!lastfile.equals(result)){
savePageToFile(_idautor + "_" + _idbook, result);
}
}else{
Toast.makeText(MainActivity.this, "Error checkChangesTask", Toast.LENGTH_SHORT).show();
}
this.mProgressDialog2.dismiss();
}
之前我循环调用的代码:
public void checkChanges() {
String[][] db_books = db.selectAllBOOKS();
if (db_books.length>0){
for (int j = 0; j < db_books.length; j++){
new checkChangesTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, db_books[j][1], db_books[j][0], db_books[j][2]);
}
}
}
一切正常,但对话框未显示正确的值。首先,值得到 0%,然后突然切换到 100%。
按顺序调用AsyncTask (...executeOnExecutor(AsyncTask.SERIAL_EXECUTOR...)。
如果你运行一个不在循环中的 AsyncTask,所有的显示都是完美的!
android:targetSdkVersion = "14"
我请求你的帮助。
【问题讨论】:
-
这将如何显示...您在屏幕上同时显示多个对话框...为什么循环中的 asyntask...?
-
我从数据库中获得了书籍(页面)的列表。和支出审查 - 互联网上有任何更新吗?我花一个字一个字地检查。如果有差异 - 然后将文件与图书一起重新保存。
-
因此您可以将整个循环移动到单个异步任务中......
-
如果不可能呢?
-
亲爱的人们......一切皆有可能。你正在尝试的逻辑不好......所以改变你的逻辑。或者你可以一个一个地调用所有的 asynctask。就像如果一个完成然后调用另一个。
标签: java android android-asynctask progressdialog