Java foreach中的android异步任务
具有以下异步任务代码:Java foreach中的android异步任务,java,android,android-asynctask,progressdialog,Java,Android,Android Asynctask,Progressdialog,具有以下异步任务代码: private class checkChangesTask extends AsyncTask<String, Void, String> { protected ProgressDialog mProgressDialog2; protected String _url = "", _idautor="", _idbook=""; @Override protected void onPreExecute() { super.onPreExec
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();
}
私有类checkChangesTask扩展异步任务{
受保护的ProgressDialog mProgressDialog2;
受保护字符串_url=“”、_-idautor=“”、_-idbook=“”;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
this.mProgressDialog2=新建进度对话框(MainActivity.this);
这个.mProgressDialog2.setMessage(“检查更改…”);
此.mProgressDialog2.setUndeterminate(false);
this.mProgressDialog2.setCanceledOnTouchExter(false);
此.mProgressDialog2.setCancelable(true);
此.mProgressDialog2.setProgressStyle(ProgressDialog.STYLE\u水平);
这个.mProgressDialog2.setMax(100);
此.mProgressDialog2.setProgress(0);
这个.mProgressDialog2.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
单据单据=空;
字符串_html=“”;
_idautor=params[0];
_idbook=params[1];
_url=params[2];
试一试{
doc=Jsoup.connect(_url).userAgent(“Mozilla”).get();
元素dd=文件选择(“dd”);
int size=dd.size();
int p=1;
对于(元素src:dd){
此.mProgressDialog2.setProgress(p*100/尺寸);
如果(P0){
对于(int j=0;j
一切正常,但对话框显示的值不正确。首先,它值0%,然后突然切换到100%
按顺序调用AsyncTask(…executeOnExecutor(AsyncTask.SERIAL_EXECUTOR…)
如果您运行一个不在循环中的AsyncTask,那么所有的显示都是完美的
android:targetSdkVersion=“14”
我请求您的帮助。您需要在AsyncTask中使用
onProgressUpdate()
。类似的内容(大概是这样的)
并替换此行:
this.mProgressDialog2.setProgress(p*100/size);
为此:
publishProgress(new int[]{p,size})
这将如何显示…您同时在屏幕上显示多个对话框…为什么在循环中显示asyntask…?我得到一个书籍(页面)列表从数据库中。和开支审查-互联网上有任何更新吗?我花时间逐字检查。如果有差异,然后将文件与书一起重新保存。这样你就可以将整个循环移动到单个异步任务中..如果不可能,亲爱的朋友..一切都有可能。你尝试的逻辑不好。..所以请更改逻辑。或者您可以逐个调用所有asynctask。例如,如果一个任务已完成,请调用另一个任务。
this.mProgressDialog2.setProgress(p*100/size);
publishProgress(new int[]{p,size})