Ява.яз..IllegalArgumentException: параметр, указанный как ненулевой, равен null: метод kotlin.виртуальная машина Java.внутренний.Встроенные средства.checkParameterIsNotNull


Я получаю эту ошибку

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter event

Для строки

override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent)

Ниже приведен весь код. Этот код изначально был на java, я преобразовал его в Kotlin с помощью Android Studio, но теперь я получаю эту ошибку. Я попытался восстановить и очистить проект, но это не сработало.

val action = supportActionBar //get the actionbar
action!!.setDisplayShowCustomEnabled(true) //enable it to display a custom view in the action bar.
action.setCustomView(R.layout.search_bar)//add the custom view
action.setDisplayShowTitleEnabled(false) //hide the title

edtSearch = action.customView.findViewById(R.id.edtSearch) as EditText //the text editor


//this is a listener to do a search when the user clicks on search button
edtSearch?.setOnEditorActionListener(object : TextView.OnEditorActionListener {
    override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent): Boolean {
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
         Log.e("TAG","search button pressed")  //doSearch()
         return true
        }
     return false
    }
})
1 7

1 ответ:

Последний параметр может быть null, как описано в docs :

KeyEvent: Если инициируется клавишей enter, то это событие; в противном случае, это значение равно null.

Поэтому вам нужно сделать тип Kotlin nullable, чтобы учесть это, иначе введенная проверка null приведет к сбою вашего приложения, когда оно получит вызов со значением null, Как вы уже видели:

edtSearch?.setOnEditorActionListener(object : TextView.OnEditorActionListener {
    override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?): Boolean {
        ...
    }
})

Более подробное объяснение типов платформ вэтом ответе .