Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ProgressDialog setProgress()不起作用_Android_Progressdialog - Fatal编程技术网

Android ProgressDialog setProgress()不起作用

Android ProgressDialog setProgress()不起作用,android,progressdialog,Android,Progressdialog,我使用以下代码从android上的服务器下载文件 下载活动的代码: 代码按预期工作,但是progressDialog.setProgressProgressProgress;什么也看不出来 logs by Log.d中显示的输出与预期一致 我不知道问题出在哪里?正如我在第一条评论中提到的,请尝试使用我假设的工作线程的构造函数得到的处理程序。您可以访问它,因为您编写了superhandler 将此代码放在要更新进度对话框的位置 handler.post(new Runnable() {

我使用以下代码从android上的服务器下载文件

下载活动的代码:

代码按预期工作,但是progressDialog.setProgressProgressProgress;什么也看不出来

logs by Log.d中显示的输出与预期一致


我不知道问题出在哪里?

正如我在第一条评论中提到的,请尝试使用我假设的工作线程的构造函数得到的处理程序。您可以访问它,因为您编写了superhandler

将此代码放在要更新进度对话框的位置

 handler.post(new Runnable() {
            @Override
            public void run() {
                progressDialog.setProgress(progress);
            }
        });

感谢所有帮助我的人,亲爱的@Anton Makov

private class DownloadReceiver extends ResultReceiver {
    Handler mhandler ;

    public DownloadReceiver(Handler handler) {
        super(handler);
        mhandler = handler;
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        super.onReceiveResult(resultCode, resultData);
        if (resultCode == DownloadService.UPDATE_PROGRESS) {
            final int progress = resultData.getInt("progress");
            Log.d("PROGRESS", String.valueOf(progress));
            mhandler.post(new Runnable() {
                @Override
                public void run() {
                    progressDialog.setProgress(progress);
                }
            });
            if (progress == 100) {
                progressDialog.dismiss();
            }

        }
    }
}

这是最终的解决方案

不确定什么是ResultReceiver,但我认为您应该使用处理程序来更新进度对话框,只有uiThread可以更改/修改UI元素。尝试使用hanlder.post并将setProgress放在@SantanuSur的可能副本中我已经添加了关于这个问题的更新。。。我添加了setMax和setUndefiniteFalse,没有阅读我发布的答案!!链接
private class DownloadReceiver extends ResultReceiver {
    Handler mhandler ;

    public DownloadReceiver(Handler handler) {
        super(handler);
        mhandler = handler;
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        super.onReceiveResult(resultCode, resultData);
        if (resultCode == DownloadService.UPDATE_PROGRESS) {
            final int progress = resultData.getInt("progress");
            Log.d("PROGRESS", String.valueOf(progress));
            mhandler.post(new Runnable() {
                @Override
                public void run() {
                    progressDialog.setProgress(progress);
                }
            });
            if (progress == 100) {
                progressDialog.dismiss();
            }

        }
    }
}