Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java foreach中的android异步任务_Java_Android_Android Asynctask_Progressdialog - Fatal编程技术网

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})