이번 시간에는 저번 시간에 이어서 JSON형식의 데이터를 받아와서 보기 좋게 보여주는 방법을 알아보겠습니다.
라이브러리 추가와 권한 등록은 이전 포스팅을 참조하시면 됩니다.
2022.09.09 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답
- 설명 -
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>
- 설명 -
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
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) 코드에서 호출하는 방법
2022.09.07 - [안드로이드] - [안드로이드 코틀린] 뒤로 가기 두 번 눌러 종료하는 방법
2022.09.06 - [안드로이드] - [안드로이드 코틀린] 애니메이션 적용해서 배터리 충전하는 방법
[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스 (0) | 2022.09.14 |
---|---|
[안드로이드 코틀린] 액티비티(Activity) 뒤로가기 버튼 만드는 방법 (1) | 2022.09.13 |
[안드로이드 코틀린] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답 (0) | 2022.09.09 |
[안드로이드 코틀린] 달력(DatePicker) 코드에서 호출하는 방법 (0) | 2022.09.08 |
[안드로이드 코틀린] 뒤로 가기 두 번 눌러 종료하는 방법 (0) | 2022.09.07 |
댓글 영역