본문 바로가기

Android/에러

Expected BEGIN_OBJECT but was STRING at line 1 column 1

1. 발생 원인

retrofit을 사용해서 데이터를 전달받을 때, response로 설정한 값과 들어온 값의 자료형이 다를 때 생기는 오류입니다.

예를 들어 제가 response에 해당하는 데이터 클래스를 다음과 같이 했다고 가정하겠습니다.

data class RefrigeratorResult(
    val beerImgUrl: BeerImage,
    val nameKr: String,
    val beerId: Int
)

그런데 데이터가 실제로는 이런 형식으로 전달된다고 하겠습니다.

data class RealRefrigeratorResult(
    val beerImgUrl: String,
    val nameKr: String,
    val beerId: Int
)

이때 저는 beerImgUrl 이라는 변수를 BeerImage라는 객체로 선언했는데, 실제로 들어온 값은 String 자료형이었습니다. 따라서 이때 이 오류가 발생합니다.

2. 해결 방법

이 둘을 통일시켜주면 됩니다.

위 예시로 설명하자면, beerImgUrl 이 String 자료형으로 들어오기 때문에, 이를 BeerImage라는 객체가 아니라 String으로 바꾸어주면 됩니다.

728x90
반응형