我收到此错误
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
}
})
答案 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)
这样称呼,而name
是null
时,我遇到了这个异常。
答案 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<*>?) {}
}
确保允许适配器和视图为空,即 (?)