有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

与WorkManager的java进度对话框

我试图在上传一些记录时显示ProgressDialog。 我正在使用WorkManager来处理上传过程,它正在按预期工作。 我能够正确显示ProgressDialog,但一旦工作完成,我似乎无法让它消失

我能够使用setProgressgetProgress,并且可以确定doWork正确地报告了工作进度,并显示一个进度对话框来反映进度。但是,工作完成后,SUCCEEDEDFAILED返回后,ProgressDialog不会消失。我试过使用cancel()dismiss()hide()等等,但还是什么都没有。有什么想法吗? 我也看过https://developer.安卓.com/topic/libraries/architecture/workmanager/advanced#unique

工作经理:

WorkManager.getInstance(getBaseContext()).getWorkInfoByIdLiveData(workRequest.getId())
                .observe(this, new Observer<WorkInfo>() {
                    @Override
                    public void onChanged(WorkInfo workInfo) {
                        if (!isNetworkConnected) {
                            final AlertDialog alertDialog = new AlertDialog.Builder(MainMenu.this).create();
                            alertDialog.setTitle("No Network Connection");
                            alertDialog.setMessage("Unable to upload records at this time. Once network connection has been re-established, the upload will resume.");
                            alertDialog.setButton(alertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    alertDialog.dismiss();
                                }
                            });
                            alertDialog.show();
                        }
                        else {
                            Data progress = workInfo.getProgress();
                            int value = progress.getInt(PROGRESS, 0);
                            ProgressDialog progressDialog = new ProgressDialog(MainMenu.this);
                            progressDialog.setMessage(String.valueOf(value));
                            progressDialog.show();
                            if (workInfo.getState().isFinished() && workInfo.getState() == WorkInfo.State.SUCCEEDED) {
                                    progressDialog.dismiss();
                                    message = workInfo.getOutputData().getString(NetworkConnected.KEY_SUCCESS);
                                    alert(message);
                            } else if (workInfo.getState() == WorkInfo.State.FAILED) {
                                    message = workInfo.getOutputData().getString(NetworkConnected.KEY_FAILURE);
                                    alert(message);
                                    progressDialog.dismiss();
                            }
                        }
                    }
                });
    }

嫁妆:


    @NonNull
    @Override
    public Result doWork() {

            int curPosition = getInputData().getInt(String.valueOf(CUR_POSITION), 0);
            String moduleName = getInputData().getString(currentModule);
            String batchID = getInputData().getString(currentBatch);
            LoadBatches();

            try {
                Global.SyncCompanies();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 10).build());
                Global.SyncLicensing();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 20).build());
                Global.SyncFormatFields();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 30).build());
                Global.SyncFormatMaster();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 40).build());
                Global.SyncPartMaster();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 50).build());
                Global.SyncWarehouseMaster();
                setProgressAsync(new Data.Builder().putInt(PROGRESS, 60).build());
                UploadBatchRecords(curPosition, moduleName, batchID);
                Data success = new Data.Builder()
                        .putString(KEY_SUCCESS, " records have been updated \n\n")
                        .build();

                return Result.success(success);
            }
            catch (Exception e) {
                Data failure = new Data.Builder()
                        .putString(KEY_FAILURE, " records failed to upload")
                        .build();
                return Result.failure(failure);
            }
        }

注: 在doWork中设置进度间隔是为了帮助显示它正在工作,这些间隔被输出到ProgressDialog以确认它正在工作。 我的目标是在工作完成后关闭/关闭/以其他方式清除ProgressDialog。到目前为止,一切都不起作用


共 (0) 个答案