최종 MVP에서는 북마크 뿐만 아니라, 내가 작성한 글도 프로필 화면에서 조회가 가능하다. 원래는, 북마크와 똑같이 유저 데이터베이스 자체에서 작성한 글의 아이디를 가지고 있다가 그 글아이디를 통해 목록을 불러오는 형태로 만들려고 했으나, 게시판/포스트 담당 팀원분이 이미 posts 데이터베이스 안에 유저아이디를 포함시킨 것을 보고, posts에서 일치하는 유저ID의 목록을 직접 가져오는 방식으로 구현하기로 결정하였다.
//ProfileViewModel.kt
fun getPosts(userID: String) {
val db = Firebase.firestore
val baseQuery: Query = db.collection("posts")
val result = baseQuery.whereIn("authorId", listOf(userID))
writingPost.clear()
result.get().addOnSuccessListener {
for (doc in it) {
val post = doc.toObject(Post::class.java)
writingPost.add(post)
}
_postList.value = writingPost
}
}
//ProfileFragment.kt
private fun setPostAdapter(userId: String) = with(binding) {
rvWriting.adapter = postAdapter
val layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, true)
rvWriting.layoutManager = layoutManager
viewModel.getPosts(userId)
viewModel.postList.observe(viewLifecycleOwner) {
postAdapter.submitList(it.toList())
if (it.isNotEmpty()) {
tvWritingSize.text = it.size.toString()
tvWritingSize.visibility = View.VISIBLE
}else {
tvWritingSize.text = it.size.toString()
if(lineWriting.visibility == View.VISIBLE){
tvTabWriting.visibility = View.VISIBLE
}
}
layoutManager.scrollToPosition(it.size-1)
}
}
_bookmarkedList가 누적되지 않도록 해당 유저의 북마크 아이디를 조회한 후 해당 아이디의 전체 아이템을 담기 전에 리스트를 비워줬었는데, 이번에는 그런 과정 없이 바로 직접 가져오다 보니까 언제 어떻게 리스트를 비워줘야할지 고민이 있었다.저번에 처음 시도해봤던 것 처럼 _postList.value를 emptyList()로 초기화하는 방법을 이번에도 시도해봤지만 통하지 않았다.callBookmarkCamp() 에서도 같은 위치에서 clear해줘도 충분했겠구나 싶었다.작성한 글을 연결하고 나니까, 같은 영역을 공유하고있는 북마크 캠핑장 탭 부분의 리사이클러뷰가 다른 화면을 다녀오면 틀어져있었다. 또, 다른 화면을 갔다오면 작성한 글의 리사이클러뷰가 한번에 활성화가 안되는 문제들이 있었다. 때문에, 클릭 시 흐름 제어를 다시 한 번 점검 후 수정해주고, 에뮬레이터 문제인지 확인을 하기 위해서 실기기로도 테스트를 해주었다.
=> 팀원들과 CPU메모리와 JSON 표준양식에 대해서 공통적으로 계속 같은 문제를 겪고 있다는 사실을 알게 되었는데, 일단 고질적으로 겪고 있던 메모리 누수 문제에 대해서 App Profiler나 카나리아 사용에 대해 권유 받아서 팀장님이 직접 확인을 해보기로 하셨다.