【问题标题】:ProgressBar is not updating from AsyncTaskProgressBar 未从 AsyncTask 更新
【发布时间】:2013-02-04 15:30:02
【问题描述】:

我正在使用 ProgressBar 来尝试显示下载和保存文件的进度。 ProgressBar 出现,但保持为 0,直到任务完成时它关闭。我尝试了不同的方法,但它不会更新。代码有问题吗?

class downloadData extends AsyncTask<Void, Integer, Void>
{

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        int count; 
        try 
        {

            URL url = new URL("http://google.com");
            URLConnection conexion = url.openConnection();
            conexion.connect();
            int lenghtOfFile = conexion.getContentLength();
            InputStream is = url.openStream();
            File testDirectory = new File(MainActivity.this.getFilesDir(), "downloadedData.txt");
            if (!testDirectory.exists()) 
            {
                testDirectory.mkdir();
            }
            FileOutputStream fos = new FileOutputStream(testDirectory+"/downloadedData.txt");
            byte data[] = new byte[1024];
            long total = 0;
            while ((count = is.read(data)) != -1) 
            {
                total += count;

                int neki = (int)(((double)total/lenghtOfFile)*100);
                this.publishProgress(neki);

                fos.write(data, 0, count);
            }
            is.close();
            fos.close();
        } 
        catch (Exception e) 
        {
            Log.e("ERROR DOWNLOADING","Unable to download" + e.getMessage());
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values)
    {
        super.publishProgress(values);
        progressDialog.setProgress(values[0]);

    }

    @Override
    protected void onPostExecute(Void result)
    {
        super.onPostExecute(result);
        progressDialog.dismiss();
    }
}

onCreate

    progressDialog = new ProgressDialog(this);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setCancelable(true);
    progressDialog.setMax(100);
    progressDialog.setMessage("Downloading Data");

当点击开始下载的按钮时:progressDialog.show();

【问题讨论】:

  • 你最终解决了这个问题吗?
  • 没有,我只是用了旋转进度条。

标签: android android-progressbar


【解决方案1】:

尝试调试计算进度的位置。这可能是演员阵容问题,您可以尝试分两步进行,以避免在除法后得到 0。但是你应该再次使用这个进度值创建一个变量,在那里放置一个断点并查看转换问题!

【讨论】:

  • 它在 -100000 范围内抛出数字。
  • 它是-1,因为它没有设置在您要下载的内容的标题中:developer.android.com/reference/java/net/…您需要找到另一种方法来获取您正在下载的内容的大小
【解决方案2】:

我不确定您的代码可能存在什么问题,但您可以试试这个 progressDialog.incrementProgressBy(incrementValue);

【讨论】:

    【解决方案3】:

    这听起来有点迟钝,但您是否在设置进度后尝试invalidate() ProgressBar?我不确定它是否会在您设置进度时自动执行。

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,花了好几个小时。问题在于进度值的计算。

       int neki = (int)(((double)total/lenghtOfFile)*100);
      

      相反,您应该分两步进行计算:

      int neki = total * 100;
      neki = (int)(neki/lengthOfFile);
      
      publishProgress(neki);
      

      这解决了我的问题。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-09-26
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 2017-08-15
        • 1970-01-01
        • 2021-03-31
        相关资源
        最近更新 更多