android :: show progress dialog直到asynctask没有完成

时间:2015-06-25 13:30:33

标签: android android-asynctask progressdialog

我正在下载15 MB的zip文件,然后将其解压缩到sd卡中。 我正在使用进度对话框来显示状态。第一次它完美运行,当我更改服务器上的db版本号以下载新文件并再次启动应用程序时,进度对话框在两者之间消失并导致应用程序崩溃。

以下是代码。

class CheckInAppUpdatesAsyncTask extends AsyncTask<Void, Void, Void> {

    Dialog  progress;


    @Override
    protected Void doInBackground(Void... params) {

        try {
            downloadDB();

        } catch (Exception e) {
        } 
     }
@Override
    protected void onPostExecute(final Void result) {

        stopWorking();
    }

    @Override
    protected void onPreExecute() {
         startWorking();
    }
  };5


private void startWorking() {

    synchronized (this.diagSynch) {
        if (this.pDiag != null) {
            this.pDiag.dismiss();
        }

        this.pDiag = ProgressDialog.show(Browse.context, "Working...",
                "Please wait while we load the encyclopedia.", true, false);
    }
}


   private void stopWorking() {

    synchronized (this.diagSynch) {
        if (this.pDiag != null) {
            this.pDiag.dismiss();
        }
    }
}

下载代码

URL url = new URL(serverFileURL);
        Log.d("FILE_URLLINK", "serverFileURL " + serverFileURL);
        URLConnection connection = url.openConnection();
        InputStream input = connection.getInputStream();
        connection.getContentLength();

        byte data[] = new byte[1024];
        input = new GZIPInputStream(input);
        InputSource is = new InputSource(input);
        InputStream in = new BufferedInputStream(is.getByteStream());
        String inAppDBName = Constants.NEW_DB_NAME_TO_DOWNLOAD;
         OutputStream output = new BufferedOutputStream(new FileOutputStream(dir + "/" + inAppDBName));

        int length;
        while ((length = in.read(data)) > 0) {
            output.write(data, 0, length);
        }

        output.flush();
        output.close();
        input.close();

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你应该在stopWorking()之前放入解压缩代码;在onPostExecute。

在所有事情发生之前,它不会关闭。