【发布时间】: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