首页 > 解决方案 > 在我的活动中执行定期工作请求时,工作管理器向 Worker 类发送错误的输入数据。如何解决?

问题描述

我正在使用Work Manager在我的活动中执行定期工作请求,并希望使用 将数据从我的活动发送到 Worker 类。我正在向我的工人班发送航班号和出发日期,但是,即使我在我的工人班中阅读航班号,它也无法识别我的工人班中的航班号并且打印或仅打印出发日期。为什么它不读取航班号而只读取出发日期?下面是代码 -setInputData()null

活动

final PeriodicWorkRequest periodicWorkRequest1 = new PeriodicWorkRequest.Builder(SendNotification.class,15, TimeUnit.MINUTES)
                            .setInputData(new Data.Builder()
                            .putString(SendNotification.FLIGHTNUMBER, flightNumber)
                            .putString(SendNotification.DATE, departure_date).build())
                            .build();

                    WorkManager workManager =  WorkManager.getInstance(FlightDescriptionActivity.this);

                    workManager.enqueue(periodicWorkRequest1);

                    workManager.getWorkInfoByIdLiveData(periodicWorkRequest1.getId())
                            .observe(FlightDescriptionActivity.this, new Observer<WorkInfo>() {
                                @Override
                                public void onChanged(@Nullable WorkInfo workInfo) {
                                    if (workInfo != null) {
                                        Log.d("periodicWorkRequest", "Status changed to : " + workInfo.getState());

                                    }
                                }
                            });

类扩展 Worker

public class SendNotification extends Worker {

    public static final String FLIGHTNUMBER="";
    public static  final String DATE = "";

    public SendNotification(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @NonNull
    @Override
    public Result doWork() {

        String flightnumber = getInputData().getString(FLIGHTNUMBER); //this gets read as data, what can be the reason?
        String date = getInputData().getString(DATE);

        sendNotification(flightnumber,date); //it prints date for flightnumber as well, and sometimes it just passes null data

        return Result.success();

    }}

我坚持了很长时间,任何帮助将不胜感激

标签: javaandroidalarmmanagerandroid-workmanagerandroid-jobscheduler

解决方案


通过更新以下代码尝试一下

workManager.enqueue(periodicWorkRequest1);

workManager.enqueueUniquePeriodicWork("check_notification", ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest1);

推荐阅读