상세 컨텐츠

본문 제목

[안드로이드 코틀린] HTTP 통신 Volley 사용법 part2 - JSON 요청 및 파싱

안드로이드

by aries574 2022. 9. 12. 16:43

본문


이번 시간에는 저번 시간에 이어서 JSON형식의 데이터를 받아와서 보기 좋게 보여주는 방법을 알아보겠습니다.

라이브러리 추가와 권한 등록은 이전 포스팅을 참조하시면 됩니다.

2022.09.09 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답

 

[안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답

HTTP통신으로 데이터를 쉽게 가져올 수 있는 Volley 사용법을 알아보겠습니다. 이번 시간에는 String형식의 값을 가져오는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 권한 등록 3. 라이브러리 

aries574.tistory.com


목차

1. 실행 화면
2. 메인 화면 activity_main.xml
3. 메인 코드 MainActivity.kt


1. 실행 화면

 


2. 메인 화면 activity_main.xml

- 설명 -

 1. 원본 데이터를 보여주는 TextView

 2. 파싱된 데이터를 보여주는 TextView

 3. 데이터를 요청하는 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!-- 원본 데이터 -->
    <TextView
        android:id="@+id/original_text"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@android:color/holo_green_light"/>
    <!-- json 파싱 -->
    <TextView
        android:id="@+id/parse_text"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_marginTop="20dp"
        android:background="@android:color/holo_blue_light"/>

    <Button
        android:id="@+id/request_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:text="요청"
        android:textSize="20sp"/>
</LinearLayout>

 


3. 메인 코드 MainActivity.kt

- 설명 -

 1. JsonObjectRequest(전송 타입, 주소 , jsonRequest, 응답 리스너, 에러 리스너)

   Json 형식의 데이터를 받기 위한 타입

 2. jsonObject.getJSONObject("data")

   객체 타입을 가져오는 함수(키값)

 3. jsonObject.getString("status")

   문자 타입을 가져오는 함수(키값)

 4. data.keys()

   키값 가져오는 함수

 5. data.getString(key)

   키값에 해당하는 값 가져오는 함수(키값)

 6. 원본 데이터

    {
        "status":"0000",
        "data":{
            "opening_price":"29537000",
            "closing_price":"29902000",
            "min_price":"29518000",
            "max_price":"30705000",
            "units_traded":"1175.26823328",
            "acc_trade_value":"35239077332.8969",
            "prev_closing_price":"29537000",
            "units_traded_24H":"4041.87703794",
            "acc_trade_value_24H":"120558832522.1939",
            "fluctate_24H":"238000",
            "fluctate_rate_24H":"0.80",
            "date":"1662954997335"
        }
    }

 7.  예제에 쓰인 api

https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all

 

현재가 정보 조회 (ALL)

현재가 정보 조회 (ALL)get https://api.bithumb.com/public/ticker/ALL_요청 당시 빗썸 거래소 가상자산 현재가 정보를 제공합니다. 필드설명타입status결과 상태 코드 (정상: 0000, 그 외 에러 코드 참조)Stringopeni

apidocs.bithumb.com

class MainActivity : AppCompatActivity() {

    var queue: RequestQueue? = null
    lateinit var originalText: TextView
    lateinit var parseText: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //초기화
        if(queue == null){
            queue = Volley.newRequestQueue(this)
        }

        originalText = findViewById(R.id.original_text)
        parseText = findViewById(R.id.parse_text)

        val requestBtn: Button = findViewById(R.id.request_btn)
        //버튼 클릭 이벤트
        requestBtn.setOnClickListener {
            //http 호출
            httpConnection()
        }
    }

    /**
     * HTTP 호출
     */
    private fun httpConnection(){

        val url: String = "https://api.bithumb.com/public/ticker"

        val jsonRequest: JsonObjectRequest = JsonObjectRequest(Request.Method.GET, url,
            null, { response ->
                //api 호출해서 받아온 값(response)
                parseData(response)
            },
            { error ->
                //에러 발생 시 실행
                originalText.text = "Error is: $error"
            }
        )

        queue?.add(jsonRequest)
    }

    /**
     * 데이터 파싱
     */
    private fun parseData(jsonObject: JSONObject){
        
        //원본 데이터 텍스트뷰에 담기
        originalText.text = jsonObject.toString()

        try{
            //데이터 담기
            val data: JSONObject = jsonObject.getJSONObject("data")

            //status 담기
            val status: String = jsonObject.getString("status")

            //data안의 전체 키값 담기
            val iterator: Iterator<String> = data.keys()

            //키값 담을 리스트
            val keyList: ArrayList<String> = ArrayList()

            //키값 리스트에 담기
            while(iterator.hasNext()){

                val keyName = iterator.next()
                //담기
                keyList.add(keyName)
            }
            //키값으로 데이터 꺼내오기
            for((index, item) in keyList.withIndex()){

                //키값 변수에 담기
                val key: String = keyList[index]

                //키값을 통해 데이터 꺼내기
                val value = data.getString(key)

                //꺼내온 데이터 텍스트에 보여주기
                parseText.append("$key : $value \n")
            }

        }catch(e: JSONException){
            e.printStackTrace()
        }
    }
}

2022.09.08 - [안드로이드] - [안드로이드 코틀린] 달력(DatePicekr) 코드에서 호출하는 방법

 

[안드로이드 코틀린] 달력(DatePicekr) 코드에서 호출하는 방법

이번 시간에는 달력(DatePicker)을 화면이 아니라 코드에서 호출하는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 activity_main.xml 3. 메인 코드 MainActivity.kt 1. 실행 화면 2. 메인..

aries574.tistory.com

2022.09.07 - [안드로이드] - [안드로이드 코틀린] 뒤로 가기 두 번 눌러 종료하는 방법

 

[안드로이드 코틀린] 뒤로 가기 두 번 눌러 종료하는 방법

이번 시간에는 뒤로 가기 버튼 두 번 눌러 앱 종료하는 방법을 알아보겠습니다. 한 번 누르면 한 번 더 누르라는 알림이 뜨고, 3초 안에 다시 눌러야 종료되는 방법입니다. 목차 1. 실행 화면 2. 

aries574.tistory.com

2022.09.06 - [안드로이드] - [안드로이드 코틀린] 애니메이션 적용해서 배터리 충전하는 방법

 

[안드로이드 코틀린] 애니메이션 적용해서 배터리 충전하는 방법

이번 시간에는 애니메이션(Animation)과 이미지를 이용해서 배터리 충전하는 모습을 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 애니메이션 battery_animation.xml 3. 메인 화면 activity_main.

aries574.tistory.com

 

 

반응형

관련글 더보기

댓글 영역