java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull

时间:2017-12-16 19:28:33

标签: android kotlin illegalargumentexception

我收到此错误

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中,我使用Android Studio将其转换为Kotlin,但现在我收到了这个错误。我尝试重建和清理项目,但这不起作用。

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
    }
})

6 个答案:

答案 0 :(得分:17)

最后一个参数可以是null,如docs

所述
  

KeyEvent:如果由回车键触发,则为事件;否则,这是空的。

所以你需要做的就是让Kotlin类型为空可以解决这个问题,否则注入的null检查会在你的应用程序获得null值时调用你的应用程序已经看过了:

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

有关this answer中平台类型的更多说明。

答案 1 :(得分:1)

我也遇到类似的异常:“ java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数title”。

然后研究了一个函数,并找到了一个变成null的参数,而该参数一定不是:

class Item(
    val id: Int,
    val title: String,
    val address: String
)

当我像Item(id, name, address)这样称呼,而namenull时,我遇到了这个异常。

答案 2 :(得分:1)

要解决此问题,需要使“事件”参数可为空。添加“?”在声明的末尾。

重写fun onEditorAction(v:TextView,actionId:Int,event:KeyEvent?)

答案 3 :(得分:0)

如果您将Java类中具有空值的参数传递给Kotlin类,则会发生此错误[通过在类之间调用方法和实现的回调]。

甚至将null传递给Compiler无法将其检测为编译时的参数,因此崩溃将在运行时发生。

因为Kotlin是null安全的,所以该应用将崩溃!

修复:通过添加?将kotlin方法中的参数类型更改为Nullable类型。到类型的末尾。

例如,您的kotlin函数将通过以下方式在Java类中调用:

var cls = ClassKotlin()
     cls.function1("name", null, true) //Call func inside kotlin class

但是您在ClassKotlin中的func声明是:

ClassKotlin {
  fun function1(firstname : String , lastName : String , status : Bool){
  //...
  }
 } // class

因此您将空值传递给了Kotlin函数中的非Null参数。

如何修复:

只需将Kotlin函数更改为:

 fun function1(firstname : String , lastName : String? , status : Boolean){
  //...
  }

* a?添加到String数据类型

答案 4 :(得分:0)

isMinifyEnabled = false或将其删除

就我而言,此问题是由于gradle文件中的isMinifyEnabled = true行引起的。删除此行后,它可以工作。

答案 5 :(得分:0)

对我来说,它发生在微调适配器项目选择器上。 下面是正确的代码。

rootView.spinnerState.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
     }
            override fun onNothingSelected(parent: AdapterView<*>?) {}
        }

确保允许适配器和视图为空,即 (?)