[TIL] Android 앱 개발 최종 : 포트폴리오 프로젝트 12

지혜·2024년 3월 18일

Android_TIL

목록 보기
65/70

✏240314 목요일 TIL(Today I learned) 오늘 배운 것

📖 프로필에서 작성한 글 확인하기

  • 최종 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.valueemptyList()로 초기화하는 방법을 이번에도 시도해봤지만 통하지 않았다.
      그래서 이번에도 전체 객체를 담기 전에 clear할 수 있도록 만들어주었다. 이렇게 만들고 보니까 callBookmarkCamp() 에서도 같은 위치에서 clear해줘도 충분했겠구나 싶었다.
  • 작성한 글을 연결하고 나니까, 같은 영역을 공유하고있는 북마크 캠핑장 탭 부분의 리사이클러뷰가 다른 화면을 다녀오면 틀어져있었다. 또, 다른 화면을 갔다오면 작성한 글의 리사이클러뷰가 한번에 활성화가 안되는 문제들이 있었다. 때문에, 클릭 시 흐름 제어를 다시 한 번 점검 후 수정해주고, 에뮬레이터 문제인지 확인을 하기 위해서 실기기로도 테스트를 해주었다.
    => 팀원들과 CPU메모리와 JSON 표준양식에 대해서 공통적으로 계속 같은 문제를 겪고 있다는 사실을 알게 되었는데, 일단 고질적으로 겪고 있던 메모리 누수 문제에 대해서 App Profiler카나리아 사용에 대해 권유 받아서 팀장님이 직접 확인을 해보기로 하셨다.


📖안드로이드 스튜디오 Commit - Shelve기능

  • 깃으로 stash를 하지 않아도 안드로이드스튜디오(인텔리제이) 자체에서 제공해주는 임시 저장 기능이 있다는 것을 알게 되었다.
  • commit하는 창에서 리프래시 아이콘이 있는 곳을 보면 끝에 바구니에 아래화살표로 담기는 듯한 모양을 하고있는 아이콘이 있다. 그게 shelve기능을 사용할 수 있는 아이콘이다.
  • stash처럼 클릭하면, 임시 저장이 가능하고, stash와 다른 점은 원한다면 특정적으로 원하는 파일에 한 해서 부분적으로도 임시저장이 가능하다는 것이다.
  • 저장을 하면 commit 탭 옆에 shelf라는 탭이 생기는데, 그곳에서는 원하는 임시 저장 항목에 대해 담기는 것과 반대로 보이는 위로 화살표 모양의 아이콘을 누르면 다시 저장되었던 항목들이 합쳐지고, 충돌이 생기면 충돌을 해결할 수 도 있다.
profile
파이팅!

0개의 댓글