Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

🌱 dreaming DiNO

[Kotlin] API호출해서 받은 JSON Data파싱하기 본문

Android

[Kotlin] API호출해서 받은 JSON Data파싱하기

MK_____ 2021. 12. 8. 13:59

레트로핏 이용해서 외부 API 호출해서 받은 JsonData를 파싱해보자!

 

call?.enqueue(object : retrofit2.Callback<JsonElement>{
    override fun onResponse(call: Call<JsonElement>, response: Response<JsonElement>) {

        when (response.code()){
            200 -> {
                Log.d(Constant.TAG, "RetrofitManager - 통신 200 성공! \n" +
                        "response: ${response.body()}")

                //jsonData처리 부분 // 파싱
                response.body()?.let{ responseBody ->
                    val body = responseBody.asJsonObject
                    val jsonArray = body.getAsJsonArray("results")
                    val sizeOfJsonArray = jsonArray.size()

                    Log.d(TAG, "받아온 jsonArray 갯수: $sizeOfJsonArray")

                    val photoDataArray = arrayListOf<Photo>()

                    for(i in 0..jsonArray.size()-1){
                        val resultObject = (jsonArray.get(i)).asJsonObject
                        val user = resultObject.get("user").asJsonObject

                        val author = user.get("username").asString
                        val likesCount = resultObject.get("likes").asInt
                        val createdAt = resultObject.get("created_at").asString
                        val urls = resultObject.get("urls").asJsonObject
                        val thumbnail = urls.get("thumb").asString

                        //Log.d(TAG, "=======잘 파싱 되었나? author: $author, likeCounts: $likesCount, createdAt: $createdAt ,thumbnail: $thumbnail")
                        //파싱한 jsonData를 photo로 만들어주기
                        val photoItem = Photo(
                            author = author,
                            likesCount = likesCount,
                            createdAt = createdAt,
                            thumbnail = thumbnail
                        )
                        photoDataArray.add(photoItem)
                    }
                    completion(RESPONSE_STATE.OKAY, photoDataArray)
                }
            }
            else -> {
                Log.d(Constant.TAG, "RetrofitManager - 통신 ${response.code()} 실패!")
                completion(RESPONSE_STATE.FAIL, null )
            }
        }
    }

    override fun onFailure(call: Call<JsonElement>, t: Throwable) {
        Log.d(Constant.TAG, "RetrofitManager - api 아예 통신 실패 / t: $t")
        completion(RESPONSE_STATE.FAIL, null )
    }

})