Вы пытаетесь вызвать
.schedule(refreshImages(knownPosts, knownFiles, httpClient), TimeUnit.MINUTES.toMillis(5))
Итак, в качестве первого аргумента вы передаете результат из refreshImages(knownPosts, knownFiles, httpClient)
, а в качестве второго аргумента - количество миллисекунд.
И, как видно из ошибки компиляции, класс Timer имеет два метода schedule()
, но оба ожидают в качестве аргумента TimerTask. И ваш refreshImages
метод не возвращает TimerTask, поэтому он не компилируется.
Если вы хотите использовать один из этих двух методов Timer, вам нужно создать экземпляр TimerTask и передать егов качестве аргумента.
Я предполагаю, что вы хотели бы передать функцию, которая будет выполнена после некоторой задержки. Это не то, что вы делаете сейчас. Что вы делаете, так это то, что вы немедленно выполняете refreshImages()
и передаете возвращаемое значение schedule()
.
Передача функции невозможна с помощью встроенного метода расписания Timer: он не ожидает функцию, но TimerTask. Но, как показывает документация Kotlin, на которую вы ссылались, это возможно, вызвав одну из функций расширения стандартной библиотеки Kotlin.
Подпись функции расширения расписания:
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask
Итак,как видите, его первый аргумент является задержкой, а второй аргумент является функцией с TimerTask
в качестве получателя. Таким образом, вы можете вызвать эту функцию расширения, используя задержку в качестве первого аргумента и лямбду в качестве второго аргумента:
timer.schedule(TimeUnit.MINUTES.toMillis(5)) {
refreshImages(knownPosts, knownFiles, httpClient)
}