Android 在任务完成另一个异步任务之前,已取消进度对话框

Android 在任务完成另一个异步任务之前,已取消进度对话框,android,xml-parsing,android-asynctask,Android,Xml Parsing,Android Asynctask,我想使用web服务从web下载股票。已创建同步以删除当前库存 new ResetStock().execute(); 下面是ResetStock异步: private class ResetStock extends AsyncTask<Void, Void, Void> { ProgressDialog pd; @Override protected void onPostExecute(Void result) { // TOD

我想使用web服务从web下载股票。已创建同步以删除当前库存

new ResetStock().execute();
下面是ResetStock异步:

private class  ResetStock extends AsyncTask<Void, Void, Void>
{ 
    ProgressDialog pd;



    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        pd.cancel();

    }


    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        pd=new ProgressDialog(FrmMainMenu.this);
        pd.setMessage("Please Wait. We are Downloading the Catalogue...");
        pd.show();
        pd.setCancelable(false);
        pd.setCanceledOnTouchOutside(false);
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        DatabaseHandlerStock dbc=new                        DatabaseHandlerStock(FrmMainMenu.this);
        dbc.deleteallstock();
        dbc.close();
        new AsyncStock(FrmMainMenu.this).execute();
        return null;
    }

}
现在我调用了另一个Async来下载xml并插入到我的数据库中

这是我的股票

         List<Stock> mystocks = null;
     Context mcontext;

int x=0;
public AsyncStock(Context context) {
    super();
    this.mcontext = context;
}
@Override
protected Void doInBackground(Void... arg0) {
    // TODO Auto-generated method stub

    try{
        URLConnection conn = new URL("http://192.168.1.2/mob2server.asmx/GetStock").openConnection();

        mystocks = SAXXMLParser.parse(conn.getInputStream());

     DatabaseHandlerStock dbc;
     dbc=new DatabaseHandlerStock(mcontext);
     String  category,  make,  model, productcode,  productname,  smallimages, largeimages,  description,  mrp,  unit, pkg;
     for(Stock in :mystocks)

        {
         x++;
            category=in.getCategory();
            make=in.getMake();
            model=in.getModel();
            productcode=in.getProductcode();
            productname=in.getProductname();
            smallimages=in.getSmallimages();
            largeimages=in.getLargeimages();
            description=in.getDescription();
            mrp=in.getMrp();
            unit=in.getUnit();
            pkg=in.getPkg();

            dbc.addContact(new Catalogue(category.replace("$","&"),  make.replace("$","&"),  model.replace("$","&"), productcode,  productname.replace("$","&"),  smallimages, largeimages,  description.replace("$","&"),  mrp,  unit, pkg));
        }
    dbc.close();
      }
        catch (Exception e) 
        {
            System.out.println(e.getMessage());
        }
    return null;
}
@Override
protected void onPostExecute(Void result) {

     Toast.makeText(mcontext, "Total " + x + " Models Imported!", Toast.LENGTH_LONG).show();
    super.onPostExecute(result);


}

@Override
protected void onPreExecute() {

    super.onPreExecute();
}

}
在将股票插入股票之前,我的第一个对话框是“取消”。
我希望我的对话框一直存在,直到股票被插入我的数据库。

创建另一个类,并将第二个asynctask内容打包到其中。您可以在第一个异步任务中调用这个新类。还可以使用进度更新查看正在进行的操作。这样,您将只有一个进度条,但会随时通知您。

doinbackground在后台线程上被调用。您需要在ui线程上调用asynctask。执行图。。。必须在UI线程上调用。在onpost exuecute方法中写入此行pd.dismise在第一个Asyntask的后期执行中调用第二个Asyntask,并在第二个Asyntask的后期执行中获取一个进度对话框实例并将其关闭感谢它对我起了作用。在按钮单击new ResetStock.execute时调用两个异步;新建AsyncStockFrmMainMenu.this.execute;