2013-08-22 29 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)); 
} 

}