进度条在下载时不响应

时间:2013-09-30 06:51:04

标签: android

我正在从服务器下载文件。我正在下载时用魔杖显示进度条。当我试图下载文件时,它显示进度条。它在栏中显示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);}

3 个答案:

答案 0 :(得分: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的问题

此信息并非始终可用。通常,您将知道要下载的文件的长度。根据网络服务器,协议,连接和下载方法,此信息可能并不总是可用。

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

答案 1 :(得分:1)

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

参考link

答案 2 :(得分:1)

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

@Override
protected void onProgressUpdate(String... values) {
  // TODO Auto-generated method stub
  super.onProgressUpdate(values);
  inDeterminatePB.setProgress(Integer.parseInt((values[0])));
}