作者:哪来的咸鱼 | 来源:互联网 | 2022-11-24 23:18
如何解决《指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数convertView》经验,为你挑选了2个好方法。
将适配器代码转换为Kotlin之后,我得到了此错误:
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
at ...MyAdapter.getView(Unknown Source:35)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
at android.widget.AbsListView.obtainView(AbsListView.java:2366)
扩大行时会引发错误:
class LegalAdapter internal constructor(private val activity: Activity, private val list: ArrayList- ) : BaseAdapter() {
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
val layoutInflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@SuppressLint("ViewHolder")
val row = layoutInflater.inflate(R.layout.legal_list_item, parent, false) //exception is throw here
显然,某些不应该为null的参数为null,然后kotlin对其进行检查。问题是我什至无法调试新的kotlin代码。
1> Ben P...:
该getView()
方法是Adapter
接口的一部分,并且用Java定义。文档在这里。重要的部分是关于convertView
参数的注释:
视图:如有可能,可重用的旧视图。注意:使用前,您应检查此视图是否为非null并具有适当的类型。
这意味着该框架将null
值传递convertView
给此方法是非常有效的(意味着您需要创建一个新视图并将其返回,而不是回收旧视图)。
反过来,这意味着Kotlin的定义convertView
必须为type View?
,而不仅仅是View
。因此,将函数签名更改为:
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
该工具自动生成的签名。但是,确实如此。此外,它还解决了调试器的问题。现在,它再次在方法内部的断点处停止。
2> TheWanderer..:
使convertView
可为空:
convertView: View?
我不确定行号为什么错误,但是stacktrace会告诉您在错误消息中查找的位置。