1

我正在从服务器下载文件。我想在下载时显示进度条。当我尝试下载文件时,它会显示进度条。它在栏中显示 0,但我可以下载文件。我使用的代码如下

//onPreExecute

             protected void onPreExecute() {

                 super.onPreExecute();
                    showDialog(progress_bar_type);
                }

//这是一个下载任务

protected String doInBackground(String... arg0) {
                      int bufferLength = 0;
                    try {
                                             //geting connection
                        URL url = new URL(  weburl);
                        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                        urlConnection.setRequestMethod("GET");
                        urlConnection.setDoOutput(true);
                        urlConnection.connect();
                     // getting file length
                        int lenghtOfFile = urlConnection.getContentLength();

                        File sdcard = Environment.getExternalStorageDirectory();
                        File file = new File(sdcard, "filename.extension");

                        FileOutputStream fileOutput = new FileOutputStream(file);
                        InputStream inputStream = urlConnection.getInputStream();

                        byte[] buffer = new byte[1024];

                        long total = 0; 
                         while ( (bufferLength = inputStream.read(buffer))!= -1) {
                            total += bufferLength ;
                                              //progress
                            publishProgress(""+(int)((total*100)/lenghtOfFile));
                            fileOutput.write(buffer, 0, bufferLength);
                        }

我使用 onProgressUpdate 来显示结果但没有用。它仍然只有 0

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

//onPostExecute

                    protected void onPostExecute(final Boolean success) {

                        dismissDialog(progress_bar_type);}
4

3 回答 3

3
long total = 0;
int iterationCount = 0;
int progress = 0;
while ( (bufferLength = inputStream.read(buffer))!= -1) {
total += bufferLength ;
progress = (int)((total*100)/lenghtOfFile)
if(iterationCount >= 14 || progress == 100) {
     iterationCount = 0;
     publishProgress(String.valueOf(progress));
} else {
     iterationCount += 1;
}

fileOutput.write(buffer, 0, bufferLength);
}

根据您获取文件长度等于-1的问题

这些信息并不总是可用的。通常你会知道你正在下载的文件的长度。根据网络服务器、协议、连接和下载方法,此信息可能并不总是可用。

您绝对应该修改您的应用程序,以便它可以处理这种情况。我想你会发现使用不同连接方法的不同设备会提供不同的结果。

于 2013-10-01T05:52:48.763 回答
1

使用 AsyncTask 的 onProgressUpdate() 方法来更新你的进度条。

参考链接

于 2013-09-30T06:56:27.923 回答
1

您需要在 asynctask 中再添加一个覆盖方法

@Override
protected void onProgressUpdate(String... values) {
  // TODO Auto-generated method stub
  super.onProgressUpdate(values);
  inDeterminatePB.setProgress(Integer.parseInt((values[0])));
}
于 2013-09-30T07:14:11.213 回答