Retrofit - ResponseBody 원시 데이터 출력
Call<ResponseBody> - Retrofit으로 받아온 원시데이터를 가공없이 출력하기
Open API '공공데이터 포털'
- 측정소정보 조회 서비스 API - 'TM 기준좌표 조회'
- 응답결과를 JSON / XML 객체변환된 데이터가 아닌, 원시 데이터 출력 목적
원하는 출력 결과 - JSON / XML
- XML 원시데이터
더보기
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<sidoName>서울특별시</sidoName>
<sggName>종로구</sggName>
<umdName>혜화동</umdName>
<tmX>200089.126044</tmX>
<tmY>453946.42329</tmY>
</item>
</items>
<numOfRows>10</numOfRows>
<pageNo>1</pageNo>
<totalCount>1</totalCount>
</body>
</response>
- JSON 원시데이터
더보기
{
"MsrstnInfoInqireSvrVo": {
"_returnType": "json",
"addr": "",
"districtNum": "",
"dmX": "",
"dmY": "",
"item": "",
"mangName": "",
"map": "",
"numOfRows": "10",
"oper": "",
"pageNo": "1",
"photo": "",
"resultCode": "",
"resultMsg": "",
"rnum": 0,
"serviceKey": "ServiceKey",
"sggName": "",
"sidoName": "",
"stationCode": "",
"stationName": "",
"tm": 0,
"tmX": "",
"tmY": "",
"totalCount": "",
"umdName": "혜화동",
"ver": "",
"vrml": "",
"year": ""
},
"list": [
{
"_returnType": "json",
"addr": "",
"districtNum": "",
"dmX": "",
"dmY": "",
"item": "",
"mangName": "",
"map": "",
"numOfRows": "10",
"oper": "",
"pageNo": "1",
"photo": "",
"resultCode": "",
"resultMsg": "",
"rnum": 0,
"serviceKey": "",
"sggName": "종로구",
"sidoName": "서울특별시",
"stationCode": "",
"stationName": "",
"tm": 0,
"tmX": "200089.126044",
"tmY": "453946.42329",
"totalCount": "",
"umdName": "혜화동",
"ver": "",
"vrml": "",
"year": ""
}
],
"parm": {
"_returnType": "json",
"addr": "",
"districtNum": "",
"dmX": "",
"dmY": "",
"item": "",
"mangName": "",
"map": "",
"numOfRows": "10",
"oper": "",
"pageNo": "1",
"photo": "",
"resultCode": "",
"resultMsg": "",
"rnum": 0,
"serviceKey": "ServiceKey",
"sggName": "",
"sidoName": "",
"stationCode": "",
"stationName": "",
"tm": 0,
"tmX": "",
"tmY": "",
"totalCount": "",
"umdName": "혜화동",
"ver": "",
"vrml": "",
"year": ""
},
"totalCount": 1
}
Retrofit 요청
Log.d 출력 결과 'response.body().toString()'
- OkHttpClient의 LoggingIntercepter(로깅)에 찍힌 응답 (Response Body) 데이터는 정상적 반환
- onResponse의 response.body().toString()의 값은 해당 인스턴스의 주소값으로 출력
- 출력 값 -> okhttp3.ResponseBody$Companion$asResponseBody$1@94030d3
해결 방법 'ResponseBody 객체의 string()'
- ResponseBody 객체로 인스턴스를 받은 다음 -> ResponseBody객체의 string() 메소드 사용 (toString() 아님)
response.body().string() 메소드 일회성만 가능, 두번 호출 시 반환값 없음 (Null)
onResponse의 response는 메모리에 저장되어있는 상태가 아니기 때문에
onResponse의 response는 메모리에 저장되어있는 상태가 아니기 때문에
response.body().toString() -> 인스턴스 주소값 반환 해줌
response.body().string() -> 응답 Body 내용 String 반환