Expected BEGIN_OBJECT but was STRING
업무상 Rest API를 이용해야 하는 일이 생겼는데 Response가 계속 onFailure로 들어가더라
오류를 확인해보니 객체가 아니라 문자열로 떨어진다는데.. 리턴값은 json으로 받는데 이상하다 싶었다
잘 보니 [ {....}, {....} ] 인 리스트 형식으로 떨어지고 있어서 생긴 문제였다
json object 로 시작하지 않는 경우에는
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(ScalarsConverterFactory.create())
.client(client)
.build();
GsonConverterFactory 대신 ScalarsConverterFactory 로 넣어줘야 한다
response 코드도 200으로 잘 떨어지고 이제 해결!!
...이라고 생각했지만 어째서인지 response.body() 를 로그 찍어보니 완전 다 깨져서 나오고 있었다..
이번엔 또 뭐가 문제야 ㅠㅠ 하고 봤더니 트래픽 문제를 피하려고 GZIP Compress 된 json이 떨어진다는 것이다
이걸 해결못해서 한참 찾다가 결국 Stack Overflow에서 해결법을 찾았다
OkHttpClient 를 빌드할 때 Interceptor를 추가하여
response를 gzip decompress 하는 과정을 추가해주면 정상적으로 떨어진다
오늘도 하나 더 배워가는 하루였다
'Android(Java)' 카테고리의 다른 글
디바이스 마이크에서 녹음하기 (0) | 2022.06.24 |
---|---|
Android 10 (Q) 이상에서 미디어 파일 저장하기 (0) | 2022.06.24 |
안드로이드 커스텀 진동 (0) | 2022.04.27 |
안드로이드 날짜간의 차이 계산 알고리즘 (0) | 2022.04.08 |
Android 11 이상 버전에서 외부 저장소 이미지 삭제하기 (0) | 2022.04.06 |