안드로이드

레트로핏 사용 시 JsonArray 받을 때 Expected a string but was BEGIN_ARRAY at line 1 column 2 path $

알통몬_ 2019. 1. 4. 09:32
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


Expected a string but was BEGIN_ARRAY at line 1 column 2 path $

저는 Retrofit 을 사용해서 jsonarray를 response 할 때 발생했습니다.

위 에러 발생 이유

reponse 는 

[{
  "dateTime" : "11/14/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "11/15/18 00:00:00",
  "value" : "5"
},{
  "dateTime" : "11/16/18 00:00:00",
  "value" : "17"
},{
  "dateTime" : "11/17/18 00:00:00",
  "value" : "40"
},{
  "dateTime" : "11/18/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "11/19/18 00:00:00",
  "value" : "77"
},{
  "dateTime" : "11/20/18 00:00:00",
  "value" : "44"
},{
  "dateTime" : "11/21/18 00:00:00",
  "value" : "41"
},{
  "dateTime" : "11/22/18 00:00:00",
  "value" : "47"
},{
  "dateTime" : "11/23/18 00:00:00",
  "value" : "61"
},{
  "dateTime" : "11/24/18 00:00:00",
  "value" : "37"
},{
  "dateTime" : "11/25/18 00:00:00",
  "value" : "4"
},{
  "dateTime" : "11/26/18 00:00:00",
  "value" : "44"
},{
  "dateTime" : "11/27/18 00:00:00",
  "value" : "60"
},{
  "dateTime" : "11/28/18 00:00:00",
  "value" : "58"
},{
  "dateTime" : "11/29/18 00:00:00",
  "value" : "44"
},{
  "dateTime" : "11/30/18 00:00:00",
  "value" : "65"
},{
  "dateTime" : "12/01/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/02/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/03/18 00:00:00",
  "value" : "21"
},{
  "dateTime" : "12/04/18 00:00:00",
  "value" : "7"
},{
  "dateTime" : "12/05/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/06/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/07/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/08/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/09/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/10/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/11/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/12/18 00:00:00",
  "value" : "0"
},{
  "dateTime" : "12/13/18 00:00:00",
  "value" : "0"
}]

이런 JsonArray 인데 retrofit @GET 에서 제대로 값을 받지 못해서 발생한 듯 합니다.

@GET 메소드를 Call<String> methodName(....); 이렇게 만들어서 그랬습니다.


해결 방법

위 데이터를 보면 dateTime 과 value 를 가지는 jsonObject 들이 모인 jsonArray이죠?

1. 먼저 jsonObject 값에 대응할 데이터 클래스를 만듭니다.

저는 간단하게 코틀린으로 만들었습니다.

data class UserData(val dateTime : String, val value : String)

자바로 만드실 경우 필드와 생성자, getter를 만들면 되겠죠?


2. @GET 의 리턴타입 변경

Call<String> -> Call<List<UserData>> 로 변경합니다.


그리고 기존 사용하던대로 사용하면 끝! 입니다.

이상입니다. 감사합니다.

반응형