更新进度对话框

时间:2016-11-29 03:11:11

标签: java android runnable retrofit2

一天的美好时光。
我正在尝试制作应该将文件上传到服务器并在ProgressDialog中显示上传进度的应用程序。

这是我到目前为止的代码:
为上传程序

创建ProgressDialog
private void createUploadingDialog(int filesCount) {
    uploadingDialog = new ProgressDialog(getActivity());
    uploadingDialog.setIndeterminate(true);
    loadingDialog.setMessage(getString(R.string.upload_progress, 0, filesCount));
    loadingDialog.show();
}

解除ProgressDialog上传程序

private void dismissUploadingDialog() {
    if (uploadingDialog.isShowing())
        uploadingDialog.dismiss();
}

更新ProgressDialog上传程序

private void updateUploadingDialog(final String dialogMessage) {
    class UpdateDialog implements Runnable {
        private String messageString;
        private UpdateDialog(String ms) { messageString = ms; }
        public void run() {
            uploadingDialog.setMessage(messageString);
        }
    }
    getActivity().runOnUiThread(new UpdateDialog(dialogMessage));
}

致电创建对话框

createUploadingDialog(imagesPathsArray.size());

致电解除对话

dismissUploadingDialog();

调用更新对话框onSuccess

updateUploadingDialog(getString(R.string.upload_progress, i, imagesPathsArray.size()));

调用更新对话框onFailure

updateUploadingDialog(getString(R.string.retrying_request));

对话框以片段形式显示。要将图像发送到服务器,我正在使用Retrofit2。

当我进行对话框的初始设置时,消息设置正确(显示总文件和当前文件),但是,在进行更新调用时,消息不会更新。出于某种原因,不会抛出任何错误,如果我添加Log.d,它甚至会显示该方法被调用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为你只调用一次更新进度,你如何列出进展状态改变监听器?如果你想使用你必须连续调用updateUploadingDialog这不是一个好的程序

你必须在asynctask中编写上传程序并在onProgressUpdate()方法中更新进度

Herehere是参考的示例

on preExecute初始化进度条,在doinbackground上传文件,在onProgressUpdate上更新进度条,在postexecute上执行上传后你想做的事情

希望这有帮助

答案 1 :(得分:0)

根据您没有使用AsyncTask,您无法获得onProgressUpdate功能的机会。因此,您必须手动更新进度条状态,就像使用自己的线程一样,您已经这样做了。但是,我使用下面的源代码解决了我的问题,你可以检查它:

range.lenght = 4