2013-04-03 63 views
3

我想更新一个进度对话框来增加类似1-100%的东西。但是,没有任何增加。它总是只表示0.虽然,我能看到我的Log Cat中打印出的数字,并且当它应该在100之后时,所有数据都会结束。Android AsyncTask publishProgress没有更新对话框

有没有人看到我缺少的东西?预先感谢您的帮助。

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 

回答

6

您有“错字”错误。您需要更换您的publishProgress()方法总计变量与下载总计

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

变量只分配到零循环之前,并没有改变到其他值。所以你执行的分区0/filesize将始终为0.

+1

谢谢!你100%正确! – Rob