Вставьте строку в комнату, используя Rxjava на Kotlin - PullRequest
0 голосов
/ 30 ноября 2018

В этой статье говорится, что я могу использовать Completable в качестве типа возврата для @Insert Но при этом возникает ошибка:

error: local variable pointToInsert is accessed from within inner class; needs to be declared final

Эта ошибка происходит с AndoridX, поскольку включена поддержка типов возврата Rxjavaтолько начиная с версии 2.1: https://issuetracker.google.com/issues/63317956#comment25

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertPoint(pointToInsert: ControlPoint): Completable

Итак, как заставить эту вещь работать?

1 Ответ

0 голосов
/ 30 ноября 2018

Поскольку эта функция полностью недоступна, если вы не используете версию 2.1+, вы можете решить эту проблему, используя более низкую версию, сделав какой-то адаптер для вас DAO:

@Dao
interface Original {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertPoint(pointToInsert: ControlPoint)

}

class AdHocCompletableAdapter(private val dao: Original) {

    fun insertPoint(pointToInsert: ControlPoint) = 
        Completable.create {
            dao.insertPoint(pointToInsert)
            it.onComplete()
        }
}

Или создать более гибкое решение(используя, например, композицию функций).

...