异步任务进度对话框显示太晚。

3

进度对话框可能会在异步任务完成后出现,通常比较晚。在doInBackground中,它调用一个Web服务并解析XML。如果XML文件较大,则活动需要等待几秒钟。

@Override
protected void onPreExecute(){
    super.onPreExecute();
    completed=false;
    this.progressDialog.show();

}

@Override
protected Boolean doInBackground(Integer... params) {
    t=HttpHelper.callWebService( url, soapAction,xml);
    if (t.equals("")){  
        return false;
    }
    else {
        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            XMLHelperFile myXmlHelperFile = new XMLHelperFile();
            xr.setContentHandler(myXmlHelperFile);
            InputSource is = new InputSource(new StringReader(CallWebFile.t)); 
            xr.parse(is);
            mesaj = myXmlHelperFile.getParsedData(); 
            completed=true;
    } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }

}

@Override
protected void onPostExecute(Boolean result) {
    super.onPostExecute(result);
    if (completed==true && progressDialog.isShowing()) progressDialog.dismiss();
}


@Override
protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);


    }
}
2个回答

1

猜测一下,将进度对话框初始化在preExecute()中。


当调用公共CallWebFile函数时进行初始化,ProgressDialog参数赋值给成员变量progressDialog,Id参数赋值给id成员变量。 - user1269301

0

你在doInBackground()方法中缺少调用publishProgress的语句,应该加上publishProgress(某个整数值);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接