전체 글

개발기록 / 공부한 내용을 정리하는 블로그
데이터를 이용한 다중 Marker를 찍고 마커가 많을 시 GoogleMap이 지저분 하지 않기 위해 클러스터를 통해 마커를 모아주기 GoogleMap API 사용과 기본 마커 찍기 Android Google Map API 사용 방법 및 예제 Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com Google Developers Console 사이트에 접속 후 프로젝트 생성 적당한 프로.. bumjae.tistory.com 코로나 진료소 API를 찔러 위도, 경도를 받고 다중 마커를 찍었는데 마커가 많아 가독성을 흐려 클러스터링을 사용하고 싶어 구현해보았다. Clustering ..
Android에서 위도,경도나 주소를 이용해서 서로를 구하는 경우에 GeoCoding이 쓰인다. GeoCoding(지오코딩) 주소를 가지고 위도,경도를 구하는 것 Reverse-GeoCoding (역지오코딩) 위도,경도를 가지고 주소를 구하는 것 (2023-02-14) GRPC 오류 유의 GeoCoding 시 try-catch문을 이용해서 GRPC 오류가 났을때의 예외를 잡는다 1. 많은 주소 Main Thread에서 동기화 작업시, 주소 변경은 시간을 많이 사용하는 작업, 비동기 작업으로 수행 2. 불안정한 인터넷 상황 3. 변환하는 좌표값(위도, 경도)가 소수점 3자리를 넘어가면 가끔 발생 GeoCoding - 주소나 지명 -> 위치 (위도,경도) //주소로 위도,경도 구하는 GeoCoding fun..
Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com Google Developers Console 사이트에 접속 후 프로젝트 생성 적당한 프로젝트 이름을 짓고 만들기 Google Maps Android API를 사용하려면 추가 설정 필요. API 및 사용 서비스 사용 설정을 클릭 검색으로 Maps SDK for Android를 찾아 선택 후 사용 클릭 왼쪽 상단 메뉴 아이콘 클릭 후 API 및 서비스 사용자 인증 정보 클릭 사용자 인증 정보 만들기를 클릭하여 API 키 클릭 생성된 Key 값 Edit API key를 클릭하거나 만들어진 API key를 클릭해 사용자 인증정보..
기본적인 Jetpack Navigation + Bottom Navigation View의 경우에는 BottomNavigationView를 클릭할 때마다 Fragment가 재생성된다. 최초에만 Fragment가 생성되고 Fragment들을 Show/Hide 하는 방향으로 구현하려 한다. Custom Navigation FragmentNavigator Class 생성 Annotation인 @Navigator.Name("keep_state_fragment") 는 해당 내비게이터의 이름이고 graph.xml에서 와 같은 형태로 쓰일 TAG의 이름을 설정한다. 해당 FragmentNavigator의 navigate를 override 하여 재정의함으로써 기존의 프래그먼트 재생성 문제를 해결 @Navigator.Na..
LiveData의 setValue와 postValue 차이 LiveData는 Observer 패턴을 따르며 데이터의 변경이 일어날 때마다 콜백을 받아 원하는 동작을 실행가능 이때 LiveData의 값을 변경하게 해주는 함수가 바로 setValue()와 postValue() 두 함수 다 접근 제한자가 protected로, 외부에서 LiveData의 값을 변경불가 외부에서 값을 변경해주기 위해서는 LiveData를 상속받은 MutableLiveData를 사용 setValue() Main Thread에서 LiveData의 값을 변경 Main Thread에서 바로 값을 변경해주기 때문에 setValue() 함수를 호출한 뒤 바로 밑에서 getValue() 함수로 값을 읽어오면 변경된 값을 가져올 수 있다. Ma..
Android에서 복잡한 뷰를 쉽게 개발할 수 있게 해주는 Airbnb의 Epoxy 라이브러리 Epoxy Airbnb에서 만든 오픈소스 라이브러리 여러 뷰 타입을 갖는 RecyclerView에서 효율적으로 사용 가능, 이를 구현하는데 필요한 boilerplate code를 제거 디자인 변경에 빠르게 적응하고코드를 모듈화하고 관리하기 쉽게 만들기 위한 많은 인터페이스를 제공 예를 들어 위의 화면들과 같이 3개의 각각 다른 뷰타 입을 가지는 화면이 있다. 이를 RecyclerView에서 구현하려면 다음과 같은 것들이 필요 RecyclerView Object RecyclerView.ViewHolder RecyclerView.Adapter Epoxy를 사용하면 아래의 컴포넌트들로 구현할 수 있다. Epoxy M..
· Java/Etc
Reactive Progragmming과 ReactiveX(Reactive Extentions)의 정의 Reactive Programming 데이터의 흐름과 전달에 관한 프로그래밍 패러다임이다. ReactiveX(Reactive Extentions) 이벤트 기반 비동기 프로그래밍을 위한 라이브러리 콜백 방식과 달리, 발생하는 이벤트를 이벤트 스트림에 전달, 이벤트 스트림을 관찰하다가 원하는 이벤트 감지 시 이에 따른 동작을 수행하는 방식 RxJava RxJava란 자바로 리액티브 프로그래밍을 할 수 있는 라이브러리이며 비동기 프로그래밍과 함수형 프로그래밍 기법을 함께 활용 데이터 흐름을 먼저 정의하고 데이터가 변경되었을때 연관되는 함수나 수식이 업데이트되는 방식 즉, 상태 변화를 관찰하고 있다가 능동적으..
AAC 실습 이전에 포스팅했던 자료를 토대로 MVVM과 Room DB를 사용해 AAC기반의 RecyclerView를 구성해보는 실습을 하였다. Android AAC (Android Architecture Component) Android Architecture Component 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음 ViewModel 앱의 Lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하는 컴포넌트 UI Controller.. bumjae.tistory.com [Android] MVVM (Model, View, ViewModel) MVVM이란? MVVM( Model View ViewModel )은 Microsoft 설계자 인 Cooper & Peters에 ..
Android Architecture Component 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음 ViewModel 앱의 Lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하는 컴포넌트 UI Controller로부터 UI 관련 데이터 저장 및 관리를 분리하여 ViewModel이 담당하도록 하면 다음과 같은 문제를 해결할 수 있다. 안드로이드 프레임워크는 특정 작업이나 완전히 통제할 수 없는 기기 이벤트에 대한 응답으로 UI Controller를 제거하거나 다시 만들 수 있는데, 이런 경우 UI Controller에 저장된 모든 일시적인 UI 관련 데이터가 삭제됩니다. 단순한 데이터의 경우 onSaveInstanceState() 메서드를 사용하여 복구할 수 있지만 ..
bumjae
Android Technote