在任务完成另一个AsyncTask之前取消了进度对话框

时间:2013-11-26 09:33:53

标签: android xml-parsing android-asynctask

我想使用Web服务从网上下载库存。创建同步以删除当前库存

new ResetStock().execute();

这是ResetStock Async:

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

}

现在我调用另一个异步下载和xml并插入我的数据库

这里是Asyncstock

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

}

我的第一个对话框在库存插入库存之前取消。 我希望我的对话框在那里,直到库存插入我的数据库。

1 个答案:

答案 0 :(得分:0)

创建另一个类并在其中打包第二个asynctask内容。你可以在第一个asynctask中调用这个新类。还可以使用进度更新来查看正在进行的操作。通过这种方式,您将只有一个进度条,但会通知您。