본문 바로가기

Android/note

[Android] Firebase Realtime Database를 REST로 사용할 때 key값에 "이제는" 접근한 사람

지난 포스팅에서 key값으로 저장했을 때 접근하지 못해서

0, 1, 2와 같은 list의 형태로 저장을 해놓은 과거의 나

 

근데 이제 알아냈어요!

 

사진에서와 같이 각각의 데이터의 key 값인 -My1CqVip8Y4pDNElxAQ, -MyDS0h0VDWRyWT_vF2g에

접근하려고 하였는데 지난번에는 실패했습니다ㅠ

 

시도한 방법

data class FriendListDAO(
    @SerializedName("name")
    val friendInfo: List<FriendDAO>
)

data class FriendDAO(
    @SerializedName("key")
    var key: String = "",
    @SerializedName("name")
    val name: String = "",
    @SerializedName("image_path")
    val imagePath: String? = null
)

name으로 받고 내부의 데이터는 List 형식으로 받게끔 해놓았는데

 

사실 잘못된 부분은

1. name에 매핑되지도 않음

2. jsonObject는 array로 변경할 수 없다는 문구가 출력됨

 

2번의 문구를 보고 딱! 생각난 것은

각각의 jsonObject로 데이터가 넘어오는 것

->  jsonObject를 파싱해서 데이터를 넣어주면 되겠다.

 

private fun loadFriends() {
        viewModelScope.launch {
            val friends = async { friendRepository.getFriends() }

            val response = friends.await()
            val responseFriends = JSONObject(response.body()?.string())

            val jsonFriendList = arrayListOf<FriendDAO>()

            responseFriends.keys().forEach { key ->
                val jsonFriend = responseFriends.getJSONObject(key)
                jsonFriendList.add(FriendDAO(
                    key = jsonFriend.getString("key"),
                    name = jsonFriend.getString("name"),
                    imagePath = jsonFriend.getString("image_path")))
            }

            _friends.value = jsonFriendList
        }
    }

jsonObject.keys()는

-My1CqVip8Y4pDNElxAQ, -MyDS0h0VDWRyWT_vF2g와 같은 Key 값을 가리킵니다.

 

forEach를 통해 각각의 key로 jsonObject 들에 접근해야 합니다.

그러기 위해서는 getJSONObejct(key)를 통해 jsonObject를 가져오고

가져온 jsonObject에 저장된 데이터들을 가져오면 끗!