Java 如何将参数传递给Workmanager DoWork方法

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(

我想安排24小时后从数据库中删除任务

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?