본문 바로가기

전체 글

(271)
[디버깅] 두 개의 프래그먼트에서 동시에 LiveData를 Observing 하는 경우 데이터는 잘 가져와지지만 UI 레이아웃 할 때 문제가 생기는 것 같다. 따라서, Livedata observing을 적절히 해제 해주어야 한다. 혹은 onActivityCreate에서 선언하면 lifecyclerOwner가 스스로 컨트롤 한다. //Fragment 1 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) recycler_view.adapter = RecordTodayAdapter(requireContext(), viewModel) ... } override fun onActivityCreated(savedInstanceState: Bun..
[리팩토링] MVVM + ViewPager2 과정 1. xml에서 viewpager를 viewpager2로 교체 2. FragmentStatePagerAdapter를 FragmentStateAdapter로 교체 3. Activity에서 adapter의 setOnPageChangeListener를 registerOnPageListener로 교체 4. Activity가 FragmentActivity()를 상속받게 변경 5. Repository, ViewModel을 프래그먼트에 적절히 정의 - 프래그먼트에서 by viewModels() 와 같이 delegate 패턴을 사용하기 위해 implementation "androidx.fragment:fragment-ktx:1.2.5"를 추가해야 한다. 장점 - 관심사 분리 - 유지보수 하기 쉬운 코드
[리팩토링] 3. SQLite에서 Room으로 리팩토링 개요 HEALTH-ER 앱은 모든 DB에 관한 코드를 SQLiteOpenHelper를 통해 관리하고 있다. 상당히 row 레벨에서 컨트롤 중이고 버그도 존재하지 않지만, 과거 실력 부족으로 인해 보일러 플레이트 코드도 굉장히 많이 존재하고, 구조가 매우 좋지 않다. 그렇기에 Room 영속성 라이브러리로 앱을 관리하기로 결정했다. Migration Migration이란 안드로이드에서 DB의 변화가 발생할 때 수행하는 작업이다. 절차 1. Room Entity 생성 2. DAO 정의 3. DB 정의 1. Room Entity 생성 이 단계에서 주의해야 할 점은 각 컬럼 별 데이터의 속성(제약, 디폴트값)이 같아야 한다. 그리고 테이블 명도 똑같이 정의해야 한다. 필자의 경우 type affinity를 맞추는..
[리팩토링] 2. 운동 부위 부분 개선 2020 11 03 운동 부위 부분의 리사이클러뷰 어답터, 레이아웃, 액티비티 코드 개선 코틀린으로 변환, 데이터 바인딩 활용, 컨벤션 네이밍 준수
[리팩토링] 1. HEALTH-ER 프로젝트 개선 개요 가장 처음 개발한 HEALTH-ER 어플리케이션의 리팩토링 작업 진행 경과를 기록 현재 문제점 변수 네이밍이 전혀 일관되지 않음 보일러 플레이트 코드 Java(일부 deprecated 될 예정인 코드 존재) -> Kotlin
[디버깅] 로컬 환경에서 기존 IP로 접속이 안되는 경우 오늘 이전까지만해도 잘 되던 소켓 통신 어플리케이션의 API 호출이 안되었다. 그 이유는 로컬 환경에서는 유동 IP를 사용하기 때문에 일정 주기별로 IP가 바뀌게 된다. 따라서, 이럴 경우 포트포워딩에 사용하는 IP를 다시 설정해주면 된다.
[디버그] RecyclerView 실제 데이터와 View가 맞지 않는 문제 문제점 요약 bind 함수에서 if문에서만 뷰 갱신을 진행하는 경우, 리사이클러뷰는 뷰를 재활용하기 때문에 이전에 있던 값이 그대로 남아있다. 기존 코드의 경우 if문만 존재한다. 이때 뷰가 재활용 될 경우, 이전 뷰의 count값이 그대로 남아있어 문제가 된다. RecyclerView adapter taking wrong values I have a RecyclerView which shows two kinds of Views one represents an User publication and another that represents an Event publication. Both have elements in common, for example a TextView that s... stackove..
[리눅스 디버깅] npm을 -g 옵션으로 글로벌로 설치할 시 permission denied, mkdir ... 이 오류가 발생하는 가능성이 가장 큰 것중 하나는 node를 sudo 권한으로 설치시 발생한다고 한다. 해결법: npm install -g 로 설치되는 디렉토리 경로를 자신의 home directory로 변경. $ mkdir ~/.npm-global $ npm config set prefix '~/.npm-global' $ vi ~/.profile profile 하단에 다음 코드를 추가한다 export PATH=~/.npm-global/bin:$PATH 다시 쉘에서 다음을 실행한다. source ~/.profile 이후에 다시 설치를 진행한다. 만약 이후에도 에러가 발생할 시 다음을 실행한다. $ sudo chown -R $USER:$GROUP ~/.npm $ sudo npm install -g 설치할 ..