728x90
🙋🏻♀️ 매칭 로직 만들기
🟦 새로운 유저 정보 넣기
▶️ CardStackView에서 사용자가 왼쪽/오른쪽 Swiped 대한 이벤트 처리
- 왼쪽 Swiped 의 경우, X 표시 (don’t liked)
- 오른쪽 Swiped 의 경우, O 표시 (liked)
- + ) 모든 사용자를 보여줬다면, 다시 처음부터 회원들을 보여줄 것.
- → 이를 위해서 userCount 변수 선언해서 Swiped 전체 턴 당, 누적합을 구하고 이 값이 모든 UserDataList 개수와 동일한 경우 다시 처음부터 회원 정보를 불러오도록 getUserData() 메소드 재호출한다.
val cardStackView = findViewById<CardStackView>(R.id.cardStackView)
manager = CardStackLayoutManager(baseContext, object : CardStackListener {
override fun onCardDragging(direction: Direction?, ratio: Float) {
}
override fun onCardSwiped(direction: Direction?) {
if(direction == Direction.Right) { //오른쪽 넘김 시
Toast.makeText(this@MainActivity, "right", Toast.LENGTH_LONG).show()
}
if(direction == Direction.Left) { //오른쪽 넘김 시
Toast.makeText(this@MainActivity, "left", Toast.LENGTH_LONG).show()
}
userCount = userCount + 1
if(userCount == usersDataList.count()) { //모두 다 넘겼으면
getUserDataList() //다시 처음부터 user 리스트 받아오고
Toast.makeText(this@MainActivity, "다시 시작", Toast.LENGTH_LONG).show()
}
}
override fun onCardRewound() {
}
override fun onCardCanceled() {
}
override fun onCardAppeared(view: View?, position: Int) {
}
override fun onCardDisappeared(view: View?, position: Int) {
}
})
cardStackAdapter = CardStackAdapter(baseContext, usersDataList)
cardStackView.layoutManager = manager
cardStackView.adapter = cardStackAdapter
getUserDataList() //실행
}
🟦 현재 로그인한 User의 성별과 다른 성별의 User 불러오기
▶️ 나와 다른 성별의 User 회원 정보들을 불러오기
- 1) 현재 로그인한 User의 성별을 알아야 함
- 2) 그 성별과 다른 성별의 User에 한해서만 List 에 선별해서 화면에 불러오면 된다.
🟧 MainActivity.kt
- 1) 현재 로그인한 User의 성별 데이터를 불러올 것
- getMyUserData() 메소드 내부에서 처리
//DB에서 현재 로그인한 사용자의 회원 정보 받아오는 부분
private fun getMyUserData() {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
//데이터 가져와서
val data = dataSnapshot.getValue(UserDataModel::class.java)
Log.d("test", data?.gender.toString())
//현재 User 의 gender 정보
currentUserGender = data?.gender.toString()
// 내부적으로 반대의 성별 회원 데이터를 불러오도록 작성할 것
getUserDataList(currentUserGender)
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
}
}
FirebaseRef.userInfoRef.child(uid).addValueEventListener(postListener)
}
- 2) 현재 로그인한 User의 값을 currentUserGender 변수에 담아둔 뒤, 이 값을 인수로 갖고 내부적으로 이 값의 gender와 다른 값을 갖는 User들을 UserDataList에 add() 처리하는 로직을 갖도록 만든다.
- getUserDataList(currentUserGender) 메소드 내부에서 처리
//DB에서 회원정보 받아오는 부분
private fun getUserDataList(currentUserGender : String) {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for(dataModel in dataSnapshot.children) {
val user = dataModel.getValue(UserDataModel::class.java)
if(user?.gender.toString().equals(currentUserGender)) {
//만약 같은 성별인 경우
}else{ //다른 성별인 경우
usersDataList.add(user!!) //이 경우에만 UserList에 담음
}
}
cardStackAdapter.notifyDataSetChanged()
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w("test", "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userInfoRef.addValueEventListener(postListener)
}
}
🟧 실행화면
1) 현재 로그인한 User의 gender 값이 W(oman)이면 gender가 M(en)인 회원들만 main액티비티에 보여진다.
2) 현재 로그인한 User의 gender 값이 M(an)이면 gender가 W(oman)인 회원들만 main 액티비티에 보여진다.
728x90
'App(앱)_관련 공부 모음 > [Android 관련]' 카테고리의 다른 글
[Android] 좋아요 표시하기 (0) | 2022.09.24 |
---|---|
📍[에러] v/fa inactivity disconnecting from the service (0) | 2022.09.24 |
[Android] Glide 글라이드 사용해서 저장한 회원 이미지 불러오기 (0) | 2022.09.23 |
📍[에러] StorageException has occurred. User does not have permission to access this object. (0) | 2022.09.22 |
[Firebase] 의 RealTime DB 사용 (0) | 2022.09.21 |