Java 如何将参数传递给Workmanager DoWork方法
我想安排24小时后从数据库中删除任务Java 如何将参数传递给Workmanager DoWork方法,java,android,android-workmanager,Java,Android,Android Workmanager,我想安排24小时后从数据库中删除任务 public class WorkManager extends Worker { public WorkManager(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork(
public class WorkManager extends Worker {
public WorkManager(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
return null;
}}
如何将要删除的任务作为参数传递给DoWork方法,例如
public void deleteTask(Task task){
DataBaseHelper db = new DataBaseHelper(context);
db.deleteOne(task);
}
Worker
类仍然不支持将自定义对象作为参数传入数据。您可以调整deleteOne
方法,根据id删除任务,并将要删除的id传递给Worker
public static OneTimeWorkRequest create(String id) {
Data inputData = new Data.Builder()
.putString(TASK_ID, id)
.build();
return new OneTimeWorkRequest.Builder(SampleWorker.class)
.setInputData(inputData)
.setInitialDelay(24, TimeUnit.HOURS)
.build();
}
...
@NonNull
@Override
public Result doWork() {
String taskId = getInputData().getString(TASK_ID);
...
...
}
如果您仍然坚持将任务
作为参数传递给工作人员
,您可以尝试
public static OneTimeWorkRequest create(Task task) {
String strTask = new Gson().toJson(task);
Data inputData = new Data.Builder()
.putString(TASK, strTask)
.build();
return new OneTimeWorkRequest.Builder(SampleWorker.class)
.setInputData(inputData)
.setInitialDelay(24, TimeUnit.HOURS)
.build();
}
...
@NonNull
@Override
public Result doWork() {
String strTask = getInputData().getString(TASK);
Task task = new Gson().fromJson(strTask, Task.class);
...
...
}
在Gson的build.gradle
中添加此依赖项
implementation 'com.google.code.gson:gson:2.8.6'
要了解更多信息和研究,请查看另一种方法是使用WorkerFactory,Pietro Maggi在本文中提供了更多详细信息:如何从Mainactivity调用OnetimeWorkrequest?