WorkManager periodi c запрос не выполняется? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь периодически звонить через API каждый час. Я знаю, что минимальный интервал времени для запроса periodi c составляет 15 минут, я определенно сохранил его больше.

Ниже приведен мой код для запуска periodi c request

val data = Data.Builder().putString(
            "covid_country",
            viewModel?.getSavedCountry()
        ).build()

        val request =
        PeriodicWorkRequest.Builder(CovidWorker::class.java, 1, TimeUnit.HOURS)
            .setInputData(data)
            .setConstraints(
                Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build()
            )
            .build()


        WorkManager.getInstance(this)
            .enqueueUniquePeriodicWork("simplified", ExistingPeriodicWorkPolicy.KEEP, request)

В doWork методе класса workmanager я просто вызываю API и отправляю локальное уведомление, если успешно.

override fun doWork(): Result {
        val covidCountry = inputData.getString("covid_country")
        Log.i("savedd112", covidCountry)
        Coroutines.main {

            val response =
                CovidApi().getCovidCases("india")

            val count = response?.get(response.size - 1)?.Cases ?: 0
            Log.i("hereeached", "mark")
            displayNotification("Cases in india", "$count")


        }
        return Result.retry()
    }

Но он никогда не запускается. Я не вижу своего локального уведомления. Я ждал этого целый день. Нет простого способа отладки, поэтому я решил преобразовать свой периодический рабочий запрос c в одноразовый рабочий запрос и добавил кнопку в моем UI, а на кнопку прослушивателя щелчка я вызвал следующий код

WorkManager.getInstance(this).enqueue(request)

Теперь API вызывается правильно, и локальное уведомление отображается при успешном выполнении api. Я не понимаю, почему мой periodi c запрос не выполняется

1 Ответ

0 голосов
/ 15 апреля 2020

Так что я наконец понял это

Вместо использования

ExistingPeriodicWorkPolicy.KEEP

используйте это

ExistingPeriodicWorkPolicy.REPLACE
...