2014-05-21 63 views
1

我正在使用進度條顯示下載進度。這裏是我的代碼: -ProgressBar在下載時閃爍

@Override 
    protected String doInBackground(String... f_url) { 
     int count; 

     Looper.prepare(); 
     Boolean check_sd_card_mounted = android.os.Environment 
       .getExternalStorageState().equals(
         android.os.Environment.MEDIA_MOUNTED); 
     ConnectivityManager cm = (ConnectivityManager) mcontext 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo(); 
     boolean isConnected = false; 
     if (activeNetworkInfo != null) { 
      isConnected = activeNetworkInfo.isConnected(); 
     } 
     if (check_sd_card_mounted) { 
      if (!isConnected) { 
       try { 
        return "no Connection"; 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } else { 
       download(f_url[0]); 
      } 
     } 

     return null; 
    } 

    /** 
    * Updating progress bar 
    * **/ 
    @Override 
    protected void onProgressUpdate(Integer... values) { 
     // TODO Auto-generated method stub 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setIndeterminate(false); 
     progressBar.setMax(100); 
     progressBar.setProgress(values[0]); 

     pinProgress.setProgress(values[0]); 
     updatePinProgressContentDescription(pinProgress); 
    } 

,並在下面的下載()和複印件()函數從我打電話publishProgress()來updatemy進度

private long download(String url) { 
     int bytesCopied = 0; 
     try { 

      client = new DefaultHttpClient(); 
      httpGet = new HttpGet(url); 
      response = client.execute(httpGet); 
      totalSize = response.getEntity().getContentLength(); 
      File file = new File(Environment.getExternalStorageDirectory() 
        + "/" + "MyFile1.pdf"); 
      if (file.exists() && totalSize == file.length()) { 

       Toast.makeText(mcontext, "File already downloaded", 
         Toast.LENGTH_LONG).show(); 

      } else if (file.exists()) { 
       httpGet.addHeader("Range", "bytes=" + file.length() + "-"); 
       client = new DefaultHttpClient(); 

       httpGet = new HttpGet(url); 
       response = client.execute(httpGet); 
      } 
      outputStream = new ProgressReportingRandomAccessFile(file, "rw"); 
      publishProgress(0, (int) totalSize); 
      InputStream input = response.getEntity().getContent(); 
      bytesCopied = copy(input, outputStream); 

     } catch (Exception e) { 
      Toast.makeText(mcontext, e.getMessage(), Toast.LENGTH_LONG) 
        .show(); 
     } 
     return bytesCopied; 
    } 

    public int copy(InputStream input, RandomAccessFile out) 
      throws IOException, NetworkErrorException { 

     if (input == null || out == null) { 
      return -1; 
     } 

     byte[] buffer = new byte[8192]; 

     BufferedInputStream in = new BufferedInputStream(input, 8192); 

     int count = 0, n = 0; 
     long errorBlockTimePreviousTime = -1, expireTime = 0; 
     long total = 0; 
     try { 

      byte data[] = new byte[8192]; 
      while (!interrupt && (count = in.read(data)) != -1) { 
       out.seek(out.length()); 
       myProgress = (int) (((long) total * 100)/totalSize); 
       publishProgress(myProgress); 
       total += count; 
       // while (!interrupt) { 
       // n = in.read(data, 0, 8192); 
       if (n == -1) { 
        break; 
       } 
       out.write(data, 0, count); 
       // count += n; 
      } 
      IsDownlodComplete = true; 
     } finally { 
      // must close client first 
      client = null; 
      out.close(); 
      in.close(); 
      input.close(); 
     } 
     return count; 

    } 

進度更新,但閃爍和不清晰。我正在onProgressUpdate更新它在UI線程上運行,但仍然閃爍。我不知道爲什麼?

在此先感謝。

+0

我在listView中使用這個progressBar。是否有我需要設置的listView中的任何屬性。因爲listItem包含許多像TextView和ProgressBar和Button的視圖。這是閃爍的原因嗎? –

回答

0

儘量減少onProgressUpdate()到:

@Override 
protected void onProgressUpdate(Integer... values) { 
    progressBar.setProgress(values[0]); 
    pinProgress.setProgress(values[0]); 
    updatePinProgressContentDescription(pinProgress); 
} 

把進度條初始化的東西到onPreExecute()。重複初始化會導致閃爍。

@Override 
protected void onPreExecute() { 
    progressBar.setVisibility(View.VISIBLE); 
    progressBar.setIndeterminate(false); 
    progressBar.setMax(100); 
} 
+0

我也試過,它仍然閃爍。 –

+0

我在listView中使用這個progressBar。是否有我需要設置的listView中的任何屬性。因爲listItem包含許多像TextView和ProgressBar和Button的視圖。這是閃爍的原因嗎? –