본문 바로가기
2023년 이전/Android

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter view

by JeongUPark 2021. 12. 5.
반응형

android 작업을 하다보니 위와 같은 error가 나타났서 그 원인을 찾아보았다.

작업 조건은 Listview에 사용되는 adapter를 BaseAdapter로 했을 때,

class TestAdapter(val context: Context) : BaseAdapter()

위와 같은 원인이 발생했습니다.

원인은

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

위의 code에서 view가 원래는 view:View?로 되있었는데 view:View로 변경해서 발생한 원입니다.

생각을 해보니, Java 변수는 언제나 null을 허용하고, Kotlin 변수는 null을 허용치 않는데, 저 getview의 원본을 보면은

public interface Adapter {
    int IGNORE_ITEM_VIEW_TYPE = -1;
    int NO_SELECTION = -2147483648;

    void registerDataSetObserver(DataSetObserver var1);

    void unregisterDataSetObserver(DataSetObserver var1);

    int getCount();

    Object getItem(int var1);

    long getItemId(int var1);

    boolean hasStableIds();

    View getView(int var1, View var2, ViewGroup var3);

    int getItemViewType(int var1);

    int getViewTypeCount();

    boolean isEmpty();

    @Nullable
    default CharSequence[] getAutofillOptions() {
        throw new RuntimeException("Stub!");
    }
}

으로 Java 파일 입니다.

즉, null 일 수 있는데 kotlin 코드에서 ? 를 해주지 않아 발생한 문제 입니다.

그냥 android studio에서 BaseAdapter를 상속할 때 생성된 그대로 사용하면 문제가 없을 텐데, 먼가 자체적으로 수정해서 발생한 문제입니다.

반응형