Android AsyncTask的publishProgress方法未更新对话框

4

我正在尝试更新进度对话框以增加类似1-100%的内容。然而,什么都没有增加。它总是只显示0。虽然我能看到数字在我的日志记录中打印出来并且一切都在100后结束。

有人看到我漏掉了什么吗?提前感谢任何帮助。

 private class DownLoadSigTask extends AsyncTask<String, Integer, String> {
    private final ProgressDialog dialog = new ProgressDialog(NasStorageNasList.this);
    // Set the fileName and filesize to be used later
    String fileName = (String) recordItem.get(mPresentDown).get("name");
    String filesize = (String) recordItem.get(mPresentDown).get("filesize");

    // can use UI thread here
    @Override
    protected void onPreExecute() {
        this.dialog.setMessage("Downloading " + fileName + " from the server. Please wait.");
        this.dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        this.dialog.setCancelable(false); 
        this.dialog.setCanceledOnTouchOutside(false);
        this.dialog.show();
    }

    // automatically done on worker thread (separate from UI thread)
    @Override
    protected String doInBackground(final String... args) {
        // Here is where we need to do the downloading of the 


        try {
            File destDir = new File(LOCALDOWNROOT);
            if (!destDir.exists()) {
                destDir.mkdirs();
            }

            File outputFile = new File(destDir, fileName);
            Log.e("What is the filename path to download? ", REMOTEDOWNROOT + DATADIRECTORY + fileName);
            InputStream fis = sardine.get(REMOTEDOWNROOT + DATADIRECTORY + "/"
                    + fileName.replace(" ", "%20"));

            FileOutputStream fos = new FileOutputStream(outputFile);
            byte[] buffer = new byte[1444];
            Log.e("What is the length of the File Size? ", filesize);


            long total = 0;
            int byteread = 0;
            while ((byteread = fis.read(buffer)) != -1) {
                downloadTotal += byteread;
                // Here is the WHILE LOOP that we will want to give the user 

                publishProgress((int)(total*100/Long.parseLong(filesize)));
                Log.e("CurrentAmount Downloaded: ", String.valueOf((int)(downloadTotal*100/Long.parseLong(filesize))));
                // How can I tell the UI the downloaded percentage?
                // So, far I am updating the log cat...but nothing for the user.


                fos.write(buffer, 0, byteread);
            }
            fis.close();
            fos.close();


        } catch (IOException e) {
            e.printStackTrace();
        }


        // Just Return null because the void task
        return null;
    }
    // add in a progress bar update
    @Override
    protected void onProgressUpdate(Integer...progress) {
        this.dialog.setProgress(progress[0]);
    }

    // can use UI thread here
    @Override
    protected void onPostExecute(final String errMsg) {
        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }

            Toast.makeText(NasStorageNasList.this, "File Download Done!",
                    Toast.LENGTH_SHORT).show();

    }
}// end DownloadSigTask
1个回答

6

您有一个"typo"错误。您需要在publishProgress()方法中将total变量替换为downloadTotal

publishProgress((int) (downloadTotal * 100 / Long.parseLong(filesize)));

在循环之前,你的变量只被赋值为零,并且从未更改为其他值。因此,你执行了除法0 / filesize,它将始终为0。


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