与WorkManager的java进度对话框
我试图在上传一些记录时显示ProgressDialog。 我正在使用WorkManager来处理上传过程,它正在按预期工作。 我能够正确显示ProgressDialog,但一旦工作完成,我似乎无法让它消失
我能够使用setProgress
和getProgress
,并且可以确定doWork
正确地报告了工作进度,并显示一个进度对话框来反映进度。但是,工作完成后,SUCCEEDED
或FAILED
返回后,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) 个答案