Как я могу вызвать интерфейс в kotlin? - PullRequest
0 голосов
/ 12 июня 2019

У меня нет проекта в моей работе, и они попросили меня дать мне пропуск, но после прохождения всего проекта, есть часть, которая выдала мне ошибку кода в данный момент. Очевидно, я впервые в Котлине, и я понятия не имею, но у меня есть идея. Я пытался решить это, и мне не удалось. Поэтому я просил о помощи. Я получаю сообщение об ошибке в начале

= SpeechService.Lintener {

Здесь код

private val mSpeechServiceListener = SpeechService.Listener { text: String?, isFinal: Boolean ->
    if (isFinal) {
        mVoiceRecorder!!.dismiss()
    }

    if (mText != null && !TextUtils.isEmpty(text)) {
        runOnUiThread {
            if (isFinal) {

                if (mText!!.text.toString().equals("hola", ignoreCase = true) || b == true) {
                    if (b == true) {
                        mText!!.text = null
                        mTextMod!!.text = text

                        repro().onPostExecute(text)
                        random = 2
                    } else {
                        b = true
                        mText!!.text = null
                        val saludo = "Bienvenido, ¿que desea?"
                        mTextMod!!.text = saludo
                        repro().onPostExecute(saludo)
                    }
                }

            } else {
                mText!!.text = text
            }
        }
    }
}

а вот интерфейс

interface Listener {

    fun onSpeechRecognized(text: String?, isFinal: Boolean)

}

Пожалуйста, помогите мне. ошибка: «Слушатель интерфейса не имеет конструктора»

1 Ответ

2 голосов
/ 12 июня 2019

Синтаксис SpeechService.Listener { } для интерфейсов SAM возможен только тогда, когда интерфейс написан на Java (см. https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions). Поскольку интерфейс написан на Kotlin, вы должны написать его так:

private val mSpeechServiceListener = object : SpeechService.Listener {

    override fun onSpeechRecognized(text: String?, isFinal: Boolean) {
        // Code here
    }

}

Вам действительно не нужен интерфейс SpeechService.Listener в Kotlin. Вы можете просто использовать лямбда-функцию. Это зависит от того, поступил ли интерфейс из библиотеки или вы написали его сами.

private val mSpeechServiceListener: (String?, Boolean) -> Unit = { text, isFinal ->
    // Code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...