【问题标题】:WorkManager periodic request not runnning?WorkManager 定期请求未运行?
【发布时间】:2020-04-13 12:39:33
【问题描述】:

我正在尝试每隔一小时定期运行一次 api 调用。我知道定期请求的最短时间间隔是 15 分钟,但我确实保留了更多。

下面是我运行定期请求的代码

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)

workmanager 类的 doWork 方法中,我只是调用 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()
    }

但它从未运行过。我没有看到我的本地通知。我等了一整天。没有简单的方法来调试这个,所以我决定将我的定期工作请求转换为一次性工作请求,并在我的UI 中添加了一个按钮,在点击监听器的按钮上我调用了以下代码

WorkManager.getInstance(this).enqueue(request)

现在 api 被正确调用,当api 成功时会显示​​本地通知。我不明白为什么我的定期请求没有运行

【问题讨论】:

    标签: android kotlin android-workmanager


    【解决方案1】:

    我终于明白了

    而不是使用

    ExistingPeriodicWorkPolicy.KEEP
    

    使用这个

    ExistingPeriodicWorkPolicy.REPLACE
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多