본문 바로가기

[안드로이드] Retrofit2 - ResponseBody 반환타입 출력

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 요청

 

Retrofit - JSON 데이터로 Retrun 요청

 

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() 아님)

JSON Type 원시데이터
XML Type 원시데이터 

response.body().string() 메소드 일회성만 가능, 두번 호출 시 반환값 없음 (Null)
onResponse의 response는 메모리에 저장되어있는 상태가 아니기 때문에

 

 

response.body().toString() -> 인스턴스 주소값 반환 해줌

response.body().string() -> 응답 Body 내용 String 반환