카카오 API를 이용한 미디어 검색 앱을 만들던 도중, 오랜만에 오류를 겪었다.
대강 이런 오류였는데 아무래도 API를 통해 받아온 데이터를 바인딩하는 과정에서 오류가 나는 거 같았다. 유독 VideoItem의 playTime을 받아올 때만 오류가 발생했다.
처음에는 API의 response 값을 받아올 때 VideoItem에 대해 잘못된 값을 참조해서 존재해야 할 값이 없는가 해서 Postman으로 직접 API를 호출해 보니, response로 주어지는 인자들의 이름은 모두 제대로 SerializedName으로 처리해 둔 상태였다. 실제로 Retrofit 객체를 통해 전달받은 데이터들을 Log로 찍어 확인해 본 결과 모두 정상적으로 받아 오고 있었다.
그래서 문제가 발생한 ItemVideoBindingImpl.java 코드를 뜯어서 확인해보니까 item_video.xml 파일의
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/playTimeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@{item.playTime + `초`}"
app:layout_constraintStart_toStartOf="@id/titleTextView"
app:layout_constraintTop_toBottomOf="@id/titleTextView" />
이 부분을 데이터 바인딩 처리할 때, item.playTime + '초' 를 담아두는 객체가 Int 형으로 생성되어 있었다(스크린샷을 남기지는 못했다). 그래서 setText() 메소드를 불러올 때 Int형을 집어넣게 되니 오류가 발생하는 듯했다.
자바 코드가 대체 왜 그렇게 생성되었는지는 모르겠으나, 어쩔 수 없이 문제가 생기는 부분을
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/playTimeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@{String.valueOf(item.playTime) + `초`}"
app:layout_constraintStart_toStartOf="@id/titleTextView"
app:layout_constraintTop_toBottomOf="@id/titleTextView" />
위와 같이 변경하니까 그제야 오류가 발생하지 않았다.
그런데, 이후에 이 오류를 재현하기 위해 xml 파일을 원복 시키고 다시 빌드했더니 정상적인 자바코드가 생성되어 오류가 발생하지 않았다.. 내 안드로이드 스튜디오의 기분이 잠깐 안 좋았던 건가 싶다.
'Dev > 안드로이드' 카테고리의 다른 글
[Android] SharedFlow 사용 시, 늦게 생성된 View에서의 초기 값 문제 (0) | 2024.05.06 |
---|---|
[Android] Kotlin DSL 이용 시, API Key 은닉하기(AGP 9.0 미만) (0) | 2024.04.17 |
[안드로이드 짤막공부] 23.09.02 (0) | 2023.09.03 |
[안드로이드 짤막공부] 23.08.22 (0) | 2023.08.23 |
[안드로이드 짤막공부] 23.08.21 (0) | 2023.08.22 |