기타/🚨 에러

Android/Kotlin #ClassCastException에러 : androidx.appcompat.widget.LinearLayoutCompat cannot be cast to android.widget.LinearLayout

둥굴둥굴둥굴레차 2022. 10. 4. 13:13

문제상황

간단히 AddView를 통해 리스트를 만드는 작업을 하고 있었다.

 

Activity와 xml을 모두 작성하고 애뮬레이터를 실행시켰는데,

앱이 켜지자마자 꺼지는 현상이 일어남과 동시에 아래의 에러를 뱉었다.

 

 

발견된 에러 코드 (텍스트)

2022-10-04 12:56:14.546 7369-7369/org.techtown.kotlinFunction E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.techtown.kotlinFunction, PID: 7369
    java.lang.RuntimeException: Unable to start activity ComponentInfo{org.techtown.kotlinFunction/org.techtown.kotlin.AddViewActivity}: java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat cannot be cast to android.widget.LinearLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat cannot be cast to android.widget.LinearLayout
        at org.techtown.kotlin.AddViewActivity.onCreate(AddViewActivity.kt:23)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

 

발견된 에러 코드 (사진)

긴 에러 사이에서 보이는 내가 작성한 AddViewActivity.kt파일!

 

 

AddViewActivity.kt파일의 23번째 줄에 내가 잘못 코드를 작성한 것이 있나 확인해보자.

 

23번째 줄엔 findViewById로 container란 id를 가진 LinearLayout을 찾아주는 코드를 작성했다.

 

에러 코드를 다시 살펴보면, 아래와 같다.

Caused by: java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat cannot be cast to android.widget.LinearLayout

즉, androidx.appcompat.widget.LinearLayoutCompat는 android.widget.LinearLayout로 캐스트 될 수 없다는 안내문구.

 

xml파일을 확인해보니 container란 id를 가진 레이아웃은 LinearLayoutCompat 레이아웃이다.

 

근데 난 LinearLayout으로 캐스팅해주었기 때문에 오류가난 것이었다.

 

 

 

해결

LinearLayout을 LinearLayoutCompat으로 바꾸어주는 것으로 이 에러는 해결되었다.

 

 

다시말해 해당 id(container)가 속한 레이아웃의 종류를 잘 확인하지 않고 casting해주었기 때문에 일어난 일이었다.