java.lang.IllegalArgumentException:指定为非空的参数为空:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull
java.lang.IllegalArgumentException : Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.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,我使用 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
}
})
最后一个参数可以是null
,如docs所述:
KeyEvent
: If triggered by an enter key, this is the event; otherwise, this is null.
所以您需要做的是让 Kotlin 类型可以为空来解决这个问题,否则注入的 null
检查会在您的应用程序收到带有 null
值的调用时崩溃您的应用程序已经看过了:
edtSearch?.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?): Boolean {
...
}
})
中有关平台类型的更多说明。
我遇到了类似的异常:"java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter title
"。
然后研究了一个函数,发现一个参数变成了null
,而must not:
class Item(
val id: Int,
val title: String,
val address: String
)
当我像 Item(id, name, address)
那样调用它并且 name
是 null
时,我遇到了这个异常。
因此,将 ?
添加到所有可疑变量类型:val title: String?
.
要解决此问题,如果您使用 TextView.OnEditorActionListener
,请使 event
参数可为空。在声明末尾添加?
:
override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?)
如果您将具有空值的参数从 Java class 传递给 Kotlin class [通过调用方法并在 classes 之间实现回调,则会发生此错误。
甚至将 null 传递给 Compiler 无法在编译时检测到的参数,因此会在 运行 时间内发生崩溃。
因为 Kotlin 是空安全的,所以应用程序会崩溃!
修复:通过添加 ? 将 kotlin 方法中的参数类型更改为可空类型到类型的末尾。
例如,您的 kotlin 函数将在 Java class 中被调用:
//java class file
ClassKotlin cls = new ClassKotlin()
cls.function1("name", null, true) //Call func from inside kotlin class
但是您在 ClassKotlin 中的 func 声明是:
//Kotlin class file
ClassKotlin {
fun function1(firstname : String , lastName : String , status : Bool){
//...
}
} // class
所以你在 kotlin func 中将一个 null 值传递给了一个非 Null 参数。
如何修复:
只需将 Kotlin 函数更改为:
fun function1(firstname : String , lastName : String? , status : Boolean){
//...
}
*一个?添加到字符串数据类型
isMinifyEnabled = false or remove this
在我的例子中,这个问题是由于 gradle 文件中的 isMinifyEnabled = true
行引起的。删除此行后它起作用了。
对我来说,它发生在旋转器适配器项目选择器上。
下面是正确的代码。
rootView.spinnerState.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
确保允许适配器和视图为空,即 (?)
我在这个问题上遇到了一些困难,我的问题是 converters class 提供给 Room 数据库 class。您可以仔细查看 class 和 根据它们对 可空性 和 [ 的预期更新变量 =22=].
我遇到了这个错误
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
}
})
最后一个参数可以是null
,如docs所述:
KeyEvent
: If triggered by an enter key, this is the event; otherwise, this is null.
所以您需要做的是让 Kotlin 类型可以为空来解决这个问题,否则注入的 null
检查会在您的应用程序收到带有 null
值的调用时崩溃您的应用程序已经看过了:
edtSearch?.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?): Boolean {
...
}
})
我遇到了类似的异常:"java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter title
"。
然后研究了一个函数,发现一个参数变成了null
,而must not:
class Item(
val id: Int,
val title: String,
val address: String
)
当我像 Item(id, name, address)
那样调用它并且 name
是 null
时,我遇到了这个异常。
因此,将 ?
添加到所有可疑变量类型:val title: String?
.
要解决此问题,如果您使用 TextView.OnEditorActionListener
,请使 event
参数可为空。在声明末尾添加?
:
override fun onEditorAction(v: TextView, actionId: Int, event: KeyEvent?)
如果您将具有空值的参数从 Java class 传递给 Kotlin class [通过调用方法并在 classes 之间实现回调,则会发生此错误。
甚至将 null 传递给 Compiler 无法在编译时检测到的参数,因此会在 运行 时间内发生崩溃。
因为 Kotlin 是空安全的,所以应用程序会崩溃!
修复:通过添加 ? 将 kotlin 方法中的参数类型更改为可空类型到类型的末尾。
例如,您的 kotlin 函数将在 Java class 中被调用:
//java class file
ClassKotlin cls = new ClassKotlin()
cls.function1("name", null, true) //Call func from inside kotlin class
但是您在 ClassKotlin 中的 func 声明是:
//Kotlin class file
ClassKotlin {
fun function1(firstname : String , lastName : String , status : Bool){
//...
}
} // class
所以你在 kotlin func 中将一个 null 值传递给了一个非 Null 参数。
如何修复:
只需将 Kotlin 函数更改为:
fun function1(firstname : String , lastName : String? , status : Boolean){
//...
}
*一个?添加到字符串数据类型
isMinifyEnabled = false or remove this
在我的例子中,这个问题是由于 gradle 文件中的 isMinifyEnabled = true
行引起的。删除此行后它起作用了。
对我来说,它发生在旋转器适配器项目选择器上。 下面是正确的代码。
rootView.spinnerState.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
确保允许适配器和视图为空,即 (?)
我在这个问题上遇到了一些困难,我的问题是 converters class 提供给 Room 数据库 class。您可以仔细查看 class 和 根据它们对 可空性 和 [ 的预期更新变量 =22=].