【问题标题】:change progress unit of progressdialog (byte to megabyte)更改progressdialog的进度单位(字节到兆字节)
【发布时间】:2013-04-07 18:23:52
【问题描述】:

我有一个进度对话框,显示使用字节作为进度单位下载我的文件 我想把进度单位换成兆字节

public void initializeDialog()
    {
        this.pDialog = new ProgressDialog(act);
        this.pDialog.setMessage("Download");
        this.pDialog.setIndeterminate(false);
        this.pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        this.pDialog.setCancelable(true);
    }

    public AsynchTest() {
        initializeDialog();
    }

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

pDialog.setProgressNumberFormat("%1d MB / %2d MB");
        pDialog.show();
        pDialog.setProgress(0);

    }

    @Override
    protected Void doInBackground(Void... params) {

        downloadContent();
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {


        pDialog.incrementProgressBy((int) byteToMB(progress[0]));
    }

    @Override
    protected void onPostExecute(Void result) {
        pDialog.dismiss();

    }

我使用此函数将字节转换为 mb

public long byteToMB(long byteTransform)
    {
        long mb=1024L*1024L;
        return byteTransform/mb;

    }

我用来更新进度对话框的代码 sn-p

byte data[] = new byte[1024];
            while ((count = input.read(data)) != -1) {  
                asynch.publishProgress(count);
                output.write(data, 0, count);


            }

我这样设置进度对话框的最大值

sizePDialog+=ConnectionManager.getLength(url);
pDialog.setMax((int) byteToMB(sizePDialog));

但是当我这样做时会出现这个错误

04-07 20:09:55.119: E/AndroidRuntime(20166): java.lang.NumberFormatException: Invalid long: "%1d"

非常感谢

【问题讨论】:

  • 什么是字节转换?
  • @pietmau 谢谢你的回复。 byteTransform 是我用来填充进度对话框的进度单元。我更新了我的代码

标签: java android progressdialog


【解决方案1】:

我认为你不应该像医生说的那样在onProgressUpdate 中调用setProgressNumberFormat http://developer.android.com/reference/android/app/ProgressDialog.html#setProgressNumberFormat(java.lang.String)

更改显示当前和最大单位的小文本格式 的进步。默认值为“%1d/%2d”。期间不应调用 编号正在进行中。

事实上setProgressNumberFormat 只会改变进度和最大进度的显示方式,你不能改变,就像你试过的那样,格式化之前的值。 我建议您在将值传输到进度对话框时将字节转换为 MB,然后将值格式化为 MB。

这样做,您应该将pDialog.incrementProgressBy(progress[0]); 替换为pDialog.incrementProgressBy(byteToMB(progress[0])); 并调用

pDialog.setProgressNumberFormat("%1d MB / %2d MB");

onPreExecute

【讨论】:

  • 非常感谢您的帮助和建议。我尝试了您的解决方案,但现在我的进度对话框没有填满。它正确显示格式 progress/23 mb 而不是 progress/24117248 但进度保持 0 。我用这个案例更新了我的代码。
  • 哦,我明白为什么我的进度对话框没有填满。这是因为 (int) byteToMB(progress[0]) 每次都返回 0 。我需要四舍五入兆字节,但我认为我们不能,因为 incrementProgressBy 只允许 int 而不是 double
  • 也许您应该使用setProgress 而不是incrementProgressBy 这样做,将读取的兆字节数保留在变量中,并使用此变量直接更新进度
  • 非常感谢您抽出宝贵时间帮助我。它现在与 setprogress 而不是 incrementProgress 完美配合(我不明白这两种方法之间的差异,即使我阅读了文档)
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2010-10-08
  • 2011-01-22
  • 2013-04-12
  • 2018-06-24
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多