Java 更改progressdialog的进度单位(字节到兆字节)

Java 更改progressdialog的进度单位(字节到兆字节),java,android,progressdialog,Java,Android,Progressdialog,我有一个进度对话框,其中显示使用字节作为进度单位下载我的文件 我想把进度单位转换成兆字节 public void initializeDialog() { this.pDialog = new ProgressDialog(act); this.pDialog.setMessage("Download"); this.pDialog.setIndeterminate(false); this.pDialog.setProgr

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

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;

    }
用于更新进度对话框的代码段

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"

非常感谢

我想你不应该像医生说的那样在
onProgressUpdate
中调用
setProgressNumberFormat

更改显示当前和最大单位的小文本的格式 进步的象征。默认值为“%1d/%2d”。不应在测试期间调用 这个数字正在上升

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

为此,您应该替换
pDialog.incrementProgressBy(progress[0])
by
pDialog.incrementProgressBy(byteToMB(progress[0])和呼叫

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

onPreExecute

什么是byteTransform?@pietmau感谢您的回复。byteTransform是我用来填充进度对话框的进度单位。我更新了我的代码非常感谢你的帮助和建议。我尝试过你的解决方案,但现在我的progressdialog无法填充。它正确地显示了格式progress/23MB,而不是progress/24117248,但进度仍然为0。我用这个案例更新了我的代码。哦,我明白为什么我的progressdialog无法填充。这是因为(int)byteToMB(progress[0])每次都返回0。我需要对兆字节进行四舍五入,但我认为我们不能这样做,因为incrementProgressBy只允许int而不是double。也许您应该使用
setProgress
而不是
incrementProgressBy
来执行此操作,将读取的兆字节数保留在一个变量中,并用此变量直接更新进度非常感谢您花时间帮助我。现在使用setprogress而不是incrementProgress可以很好地工作(但是我不理解2方法之间的区别,即使我阅读了文档)