web-dev-qa-db-ja.com

null以外として指定されたパラメーターはnullです:メソッドkotlin.jvm.internal.Intrinsics.checkParameterIsNotNull、パラメーターconvertView

アダプタコードを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<Item>) : 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コードをデバッグすることさえできないことです。

9
MiguelSlv

getView()メソッドはAdapterインターフェイスの一部であり、Javaで定義されています。 ドキュメントはこちら 。重要な部分は、convertViewパラメーターに関するこの注意です。

View:可能であれば、再利用する古いビュー。注:使用する前に、このビューが非ヌルで適切なタイプであることを確認する必要があります。

つまり、フレームワークがnullconvertView値をこのメソッドに渡すことは非常に有効です(つまり、古いビューをリサイクルするのではなく、新しいビューを作成して返す必要があることを意味します)。

同様に、これは、convertViewのKotlin定義は、Viewだけでなく、View?型でなければならないことを意味します。関数のシグネチャを次のように変更します。

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
11
Ben P.

convertViewをヌル可能にします:

convertView: View?

行番号が間違っている理由はわかりませんが、スタックトレースはエラーメッセージのどこを見るべきかを教えてくれます。

6
TheWanderer

GetViewのconvertViewをnull以外からnullableに変更します

override fun getView(position: Int, convertView: View, parent: ViewGroup): View {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
0
Lai Lee