프로젝트를 수정하려다가 firebase도 restAPI로 사용을 할 수 있다는 것을 알게되었다.
(안되는 줄 알았던 것은 비밀)
근데 제목을 어떻게 지어야할지를 모르겠다.
아무튼 시작~!
coroutine을 사용하면서 restAPI로 변경하고 있었는데
의도치않게 시간을 많이 보낸 부분이 있었다.
사진을 보기쉽게 나타내면 아래와 같다.
여기서 친구 key는 firebase에서 생성해주는 key값이다.
위의 데이터를 json으로 표시하게되면
이렇게 표시가 된다.
그래서 그게 뭐가 문제였는데?
이게 뭐가 문제야? 라는 생각이 들 수 있겠으나,
친구의 key값을 data class에 어떻게 대입을 시켜서 가져와야하는지에 대해 고민이 되었다.
왜냐면 따로 정해진 name이 없을뿐더러, 검색을 해보았을 때 내가 원하던 문제해결에 대한 답을 찾지 못했었다.
생각의 생각을 거쳐
data class FriendDAO(
val name: String,
val friendDetail: FriendDetail
)
data class FriendDetail(
@SerializedName("name")
val name: String,
@SerializedName("image_path")
val imagePath: String
)
이렇게 친구의 key를 name에 대응하도록 해보았다.
왜 name으로 설정했는데?
firebase의 문서를 보다가 아래의 사진과 같이 {"name" : "-JSOpn9ZC54A4P4RoqVa"}를 보고
생성되는 key값은 name에 대응되는구나 싶었기 때문이다.
하지만 @SerializedName으로 매핑을 시켜주어야 하는데, json에서는 그 어디에서도 name이란 단어가 보이지 않았다.
그래서 어떻게 해결했는데?
그러다가 친구의 key가 아닌 0, 1, 2와 같이 index를 부여하여 다시 생성하였다.
위의 사진과 차이점
처음에는 { object } 로 하나하나의 데이터를 나타내었다면,
이번에는 [ 배열 ] 로 데이터들이 묶여있다는 것
각각의 name(이름)값들이 있으니 data class에서도 매핑할 수 있다.
또 문제가 있다고?
그다음으로 들었던 생각은 0, 1, 2와 같은 index는 어떻게 알고 데이터에 접근해야하지?였다.
0번의 김철수한테 접근하려면
http://{db_name}/사용자id/0
위의 사진처럼 0, 1, 2와 같은 Index는 json에서 출력이 되지 않는다.
그래서 더더욱 혼란스러웠던 것 같다.
0, 1, 2와 같은 숫자가 없는데 어떻게 접근해????
다시 한 번 생각해보니 list에 데이터를 담아두고,
하나의 데이터를 클릭하면 adapter에서 해당 data의 index를 넘겨주면 되는 일이었는데
이 부분을 생각하지 못해서 몇시간을 계속 맴돌았던 것 같다.
'Android > note' 카테고리의 다른 글
[Android] Android Studio의 open file list 가 안보일때 (0) | 2022.07.10 |
---|---|
[Android] Firebase Realtime Database를 REST로 사용할 때 key값에 "이제는" 접근한 사람 (0) | 2022.04.12 |
[Android] RecyclerView의 호출 순서 (0) | 2022.03.30 |
Uni-Directional Architecture (0) | 2022.02.24 |
[Android] Design Pattern - MVC, MVP, MVVM (0) | 2022.02.10 |