Side Project - Tinder
회원 가입한 유저들을 매칭해주는 기존 틴더 앱의 간단한 기능을 구현한 프로젝트
- GitHub -> https://github.com/hwayeon351/Tinder
학습 회고
오늘은 Firebase Realtime Database에 저장된 유저 목록을 가져와 틴더에 유저 정보를 보여주는 카드를 띄우고, Swipe를 통해 Like or Dislike를 하는 기능을 구현하였다.
오늘 공부한 내용
- addListenerForSingleValueEvent
서버의 업데이트 된 값을 확인하는 대신에 로컬 디스크 캐시에서 데이터를 즉시 가져온다.
한 번 로드된 후에 자주 변경되지 않거나 능동적으로 수신 대기할 필요가 없는 데이터에 유용하다.
val currentUserDB = userDB.child(getCurrentUserId())
currentUserDB.addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.child("name").value == null) {
showNameInputPopup()
return
}
getUnSelectedUsers()
}
override fun onCancelled(error: DatabaseError) {
}
})
- ChildEventListener
ChildEventListener는 노드의 하위 요소에서 발생하는 특정 작업에 대응해서 트리거 된다.
데이터베이스의 특정 노드에 대한 변경사항을 수신 대기할 때 유용하게 사용된다.
ChiildEventListener의 이벤트 콜백에는 다음이 있다.
- onChildAdded()
항목의 목록을 검색하거나 추가가 일어나면 수신 대기한다.
이 콜백은 기존의 하위 요소별로 한 번씩 트리거 되고 이후 지정된 경로에 하위 요소가 새로 추가될 때마다 다시 트리거된다.
리스너에 전달되는 DataSnapshot에 새 하위 데이터가 포함된다.
- onChildChanged()
목록의 항목에 대한 변경사항을 수신 대기한다.
이 이벤트는 하위 노드가 수정될 때마다 트리거되며, 이벤트 리스너에 전달되는 DataSnapshot에 하위 요소의 업데이트된 데이터가 포함된다.
- onChildRemoved()
목록의 항목 삭제를 수신 대기한다.
이벤트 콜백에 전달되는 DataSnapshot에는 삭제된 하위 요소의 데이터가 포함된다.
- onChildMoved()
순서가 지정된 목록의 항목 순서의 변경사항을 수신 대기한다.
하위 요소 재정렬을 야기하는 업데이트로 인해서 onChildChanged() 콜백이 트리거될 때마다 이 이벤트가 트리거된다.
orderByChild나 orderByValue로 정렬된 데이터에 사용된다.
틴더 앱에서 새로운 사용자가 발생하거나 기존 사용자의 정보에 변화가 생기면 CardStackView의 Item을 업데이트하기 위해 ChildEventListener을 사용하였다.
private fun getUnSelectedUsers() {
userDB.addChildEventListener(object: ChildEventListener{
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
if (snapshot.child("userId").value != getCurrentUserId()
&& snapshot.child("likedBy").child("like").hasChild(getCurrentUserId()).not()
&& snapshot.child("likedBy").child("dislike").hasChild(getCurrentUserId()).not()) {
val userId = snapshot.child("userId").value.toString()
var name = "undecided"
if(snapshot.child("name").value != null) {
name = snapshot.child("name").value.toString()
}
cardItems.add(CardItem(userId, name))
adapter.submitList(cardItems)
adapter.notifyDataSetChanged()
}
}
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {
cardItems.find { it.userId == snapshot.key }?.let {
it.name = snapshot.child("name").value.toString()
}
adapter.submitList(cardItems)
adapter.notifyDataSetChanged()
}
override fun onChildRemoved(snapshot: DataSnapshot) {}
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {}
override fun onCancelled(error: DatabaseError) {}
})
}
'Android > Side Projects' 카테고리의 다른 글
당근마켓 앱 개발하기 (1) | 2022.02.19 |
---|---|
Tinder 앱 개발하기 (0) | 2022.02.18 |
Tinder 앱 개발하기 (0) | 2022.02.16 |
Tinder 앱 개발하기 (0) | 2022.02.15 |
도서 리뷰 앱 개발하기 (0) | 2022.02.14 |