Как устранить ошибку, ожидающую тело класса в kotlin - PullRequest
0 голосов
/ 17 декабря 2018

Код:

var shouldStopLoop = false

val handler = object : Handler()
val runnable = object: Runnable            //error occurs here
{
    override fun run() {
        getSubsData()
        if(!shouldStopLoop)
        {
            handler.postDelayed(this, 5000)
        }
    }
}

handler.post(runnable)

Expecting a class body Ошибка возникает при попытке создать val runnable.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

ошибка возникает из-за того, что вы обрабатываете Handler как абстрактный класс в следующем выражении:

val handler = object : Handler()

этому утверждению требуется тело класса после него, как говорит ошибка:как это:

val handler = object : Handler(){}

Однако, поскольку Handler не является абстрактным классом, более подходящим утверждением будет:

val handler = Handler()

0 голосов
/ 17 декабря 2018

Вы можете попробовать следующий подход:

// function takes lambda extension function on class Runnable as the parameter, it is known as lambda with receiver
inline fun runnable(crossinline body: Runnable.() -> Unit) = object : Runnable {
    override fun run() = body()
}

fun usingRunnable() {
    val handler = Handler()
    val runnableCode = runnable {
        getSubsData()
        if(!shouldStopLoop)
        {
            handler.postDelayed(this, 5000)
        }
    }
    handler.post(runnableCode)
}
...