2013-08-22 27 views
0

我試圖在下載文件時創建下載進度條。我跟着這個tutorial然而,我只能讓進度條計數,當我下載像圖像或MP3文件。實施進度條以下載WEB-API響應

我需要能夠下載的API響應如these,但我無法獲取其文件大小以便爲我的進度條提供參考。

 URL url = new URL(f_url[0]); 
     URLConnection connection = url.openConnection(); 
     connection.connect(); 
     // this will be useful so that you can show a typical 0-100% progress bar 
     int lenghtOfFile = connection.getContentLength(); 

在API響應中使用時,文件大小爲-1,因此整個函數都是錯誤的。

什麼是識別尺寸的方法,或者您在下載這些方法時創建進度條的其他方法。

編輯:我已經在使用異步任務,它正在工作,唯一的問題是我無法增加我的進度欄,因爲我無法獲得文件大小。

+0

可以使用異步任務..... – Piyush

+0

@PiyushGupta:對不起,忘了提,我使用異步任務了。我只需要知道如何識別我正在下載的文件的文件大小或增加進度對話框的計數的方法。 – linus

+0

你可以參考這個鏈接..對你有用.. http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a -progressdialog – Piyush

回答

3

而且你還可以使用:

class DownloadFileFromURL extends AsyncTask<String, String, String> { 

/** 
* Before starting background thread 
* Show Progress Bar Dialog 
* */ 
@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    showDialog(progress_bar_type); 
} 

/** 
* Downloading file in background thread 
* */ 
@Override 
protected String doInBackground(String... f_url) { 
    int count; 
    try { 
     URL url = new URL(f_url[0]); 
     URLConnection conection = url.openConnection(); 
     conection.connect(); 
     // getting file length 
     int lenghtOfFile = conection.getContentLength(); 

     // input stream to read file - with 8k buffer 
     InputStream input = new BufferedInputStream(url.openStream(), 8192); 

     // Output stream to write file 
     OutputStream output = new FileOutputStream("/sdcard/downloadedfile.jpg"); 

     byte data[] = new byte[1024]; 

     long total = 0; 

     while ((count = input.read(data)) != -1) { 
      total += count; 
      // publishing the progress.... 
      // After this onProgressUpdate will be called 
      publishProgress(""+(int)((total*100)/lenghtOfFile)); 

      // writing data to file 
      output.write(data, 0, count); 
     } 

     // flushing output 
     output.flush(); 

     // closing streams 
     output.close(); 
     input.close(); 

    } catch (Exception e) { 
     Log.e("Error: ", e.getMessage()); 
    } 

    return null; 
} 

/** 
* Updating progress bar 
* */ 
protected void onProgressUpdate(String... progress) { 
    // setting progress percentage 
    pDialog.setProgress(Integer.parseInt(progress[0])); 
} 

/** 
* After completing background task 
* Dismiss the progress dialog 
* **/ 
@Override 
protected void onPostExecute(String file_url) { 
    // dismiss the dialog after the file was downloaded 
    dismissDialog(progress_bar_type); 

    // Displaying downloaded image into image view 
    // Reading image path from sdcard 
    String imagePath = Environment.getExternalStorageDirectory().toString() + "/downloadedfile.jpg"; 
    // setting downloaded into image view 
    my_image.setImageDrawable(Drawable.createFromPath(imagePath)); 
} 

}