분류 전체보기
Android Retrofit2 Request URL Path를 유동적으로..!
2020. 12. 24.BASE URL은 같고, POST 시 요청하는 Request URL의 path 가 유동적으로 변하기 때문에 이에 맞게 변경 및 요청이 가야한다는 요구사항이 있었다. 문제 해결 접근 @GET 을 사용할 때 @Path 를 사용하여 request url 을 직접 설정할 수 있었기에 같은 방법으로 접근하였다. @GET("/info/{user}") fun getUserInfo( @Path("user") user: String ): Call 이런식으로 user 파라미터로 Codejun 을 전송하게 되면 request url 은 /info/Codejun 이 되어 request 한다. 그래서 post에서도 따라해봤다.. @POST("/{custom_uri}") fun requestData( @Path("custom_u..
[안드로이드 모듈] 외부 종속 라이브러리 같이 배포
2020. 12. 17.안드로이드 모듈(라이브러리)을 제작하고 배포하는 과정에서 모듈에서 사용했던 라이브러리를 외부 앱에서 불러올 수 없는 상황이 발생했다. 근데 이 라이브러리가 프로젝트 안에 aar 또는 jar의 형식으로 되어있는것이 아닌, implementation한 외부 종속 라이브러리 라는 점이다. 이를 해결하기 위해서는 외부 앱에서 내가 만든 라이브러리를 다운받아 sync 할 때 나의 라이브러리에서 사용된 외부 종속 라이브러리를 같이 다운받아 sync되게끔 해주어야 한다. 해결 방법은 아래와 같다. gradle파일에서 publishing할 때 사용했던 라이브러리들을 pom파일에 dependency 로 넣어주면 되는데, 아래 코드를 publishing하는 gradle에 추가하면 된다. pom.withXml { def d..
Android Studio 이전 버전 세팅 불러오는 방법
2020. 8. 13.Android Studio 4.1 베타를 쓰다가 업데이트가 있어 업데이트를 받았더니 기존의 keymap이 전부 바뀌었다.. Command + Delete를 누르면 라인 한 줄이 전부 사라지던 것이나, command + W를 누르면 탭이 닫히던 것, command + shift + f를 누르면 검색한거 찾아주는 단축키라던가.. 전부 이상한 것으로 변경되어 있었다. How to import settings from previous version Android Studio.. 검색..했는데.. 원하는 답변이 안 나온다. 정보력이 부족한 것이가.. 싶었으나, Android Studio에서 조금만 찾아보면 있던 것이라 없었다 보다 싶다. 그래서 기존에 쓰던 4.0(Stable) 버전에서 쓰던 환경을 그대로 가져오..
Cannot invoke setValue on a background thread 해결 방법
2020. 8. 3.AAC를 사용하면서 가끔 발생하는 오류이다. 보통 livedata 객체에 값을 넣을 때 발생한다. LiveData 객체에 값을 설정하는 방법이 두 가지가 있는데, setValue()와 postValue가 있다. 이 두 함수는 모두 LiveData객체에 값을 저장하는 역할을 한다. 이 두 함수를 구독하고 있는 옵저버가 있는 상태에서 사용하게 되면, value의 값이 변경되는 즉시 변경된 값을 받을 수 있다. 하지만 다른 점이 한 가지 있다. setValue()는 메인 쓰레드에서 바로 반영된다는 것이고, postValue는 백그라운드에서 반영된다. 따라서 해당 오류를 해결하기 위한 방법으로는, 간단하게 setValue 대신 postValue를 이용하면 된다.
통합 대기질 측정기 회의 이후..
2020. 7. 27.사실 회의 한 지는 굉장히 오래지났는데 글을 써야지 써야지 하고 미루다가 결국 지금 쓰게 된다. 그 독수리 삼형제는 강남역에서 만나 회의를 하려고 했다. 했으나,,ㅋㅋ 회의도 식후경이지.. 암 그렇고 말고.. 아니..배가 고픈걸 어떡해.. 간단히(?) 맥주 두 병 시작.. 쏘주는 이거 회의 제대로 못 할것 같아서 맥주만 시켰는데.. 뭐가 그리 아쉬운지 한 병 더 까고 끝났다. 하여튼.. 다시 정신 차리고 강남역 할리스로 진입.. 이미 배불러서 집에 엄청 가고 싶었음. 그래도 나름 열심히 회의 한 듯 싶다. 회의록도 작성하다가 결국 접었지만 대충 얘기가 몇 가지 나왔다. 경쟁사(?)와의 차이점 모듈 기능 단가 각종 인증(KC, 전파 등) 펀딩 앱에서 제공할 기능 이쪽 바닥은 처음이라.. 인증 비용이 뭐 이..
RecyclerView에 줄 라인 추가하기(Divider)
2020. 7. 27.ListView와는 다르게 RecyclerView에는 기본적으로 line divider 가 존재하지 않는다. 따라서 RecyclerView에서 제공하는 addItemDecoration 함수를 사용해야 한다. 사실 이전에도 관련 글을 포스팅한 적이 있었는데 최근 들어 사용 언어를 Kotlin으로 갈아타게 되면서 코틀린 버전도 포스팅을 해볼까 한다.. 적용을 위해서는 DividerItemDecoration 클래스를 만들고 line으로 사용할 xml을 생성해주면 된다. 일단 line으로 쓰이게 될 line_divider.xml 을 drawable안에 만들어준다. 이렇게 되면 약간의 회색 줄이 생성된다. 이제 이를 사용할 class를 생성해보자. 클래스명은 원하는 대로.. class DividerItemDeco..
통합 대기질 측정기 제작기 (절망편..)
2020. 6. 18.프로젝트 다시 살려서 뭐라도 해보겠다고 한 지가 일주일도 안 된것 같은데 벌써 절망편이라니.. 말 그대로다. 그렇다고 프로젝트가 터진 건 아니고,, 그냥 아무것도 없다. Null에서부터 다시 시작하는 것 파일이 있던것도 아니다. 그냥 없어! 기획서도 없어.. 디자이너도 없어(중요).. 스토리보드도 없어.. 시스템 구성도도 없어.. 있는 거라곤 개발자들과 하드웨어 관련 문서들 뿐... 아니 예전에 했을 때 이런거 없이 어떻게 진행이 됐었지..? 다들 텔레파시가 통했나..? 프로젝트 매니저라는 건 참 힘들고도 귀찮은 것 같다. 항상 주는 것만 받아서 해왔으니... 그리고 살짝 후회되는 디자인.. 왜 한다고 했을까 필요한 것 일단 가장 중요한 것이 "이거 만들어서 뭐 할거냐?" 라는 것이다. 궁극적인 목표 설..
통합 대기질 측정기를 만들어 보자.. 시작편
2020. 6. 11.예전부터 친구들과 진행했던 프로젝트였다. 한 2년 전 이었나.. 중간에 한 번 무산되어 관짝에 들어갔었으나.. 부활시켜 다시 진행해 보려 한다. 전자전기공학 전공 친구 하나와.. 현업에서 근무하고 있는 친구.. 얘는 원래는 백엔드 하다가.. 모바일도 하다가.. 프론트도 하다가.. 지금은 펌웨어 한다. ㅋㅋㅋㅋㅋ 워낙 이것저것 잘 하는 친구라 개발 환경도 구성을 쫙 해놨다. 대단한 친구.. 아무튼 이 친구들과 통합 대기질 측정기를 만들어야 한다. 정확한 하드웨어 사양 및 구성은 추후 적도록 할 예정이다. 일단 측정 가능한 항목들은 IAQ Level Humid Pm2.5 Co2 Tvoc 정도가 되겠다. 많기도 하네.. 장비에서 측정한 값들을 모바일 기기를 활용해 꽤 많은 것들을 할 생각이다. 좋은 모듈들 써..
Layout Inspector로 레이아웃 디버깅하기
2020. 6. 1.지난주에 Android Studio 4.0이 Stable 채널에 업데이트되었습니다. 생각보다 새로운 기능들이 많은데, 앞으로 하나씩 포스팅해보도록 하겠습니다. 왜 항상 이 친구들은 좋은 기능 만들어 놓고 꽁꽁 숨겨두는지 모르겠습니다. 뭐 할때 쓰는 걸까 공식 문서에서는 Layout Inspector를 '레이아웃이 완전히 XML로 빌드된 것이 아니라 런타임에서 빌드되어 예상치 못한 방식으로 작동될 때 유용하다.' 라고 설명하고 있습니다. 제가 해석하기로는 아마 레이아웃 구성 시 XML코드로 짜는 것이 아닌 클래스를 통해 레이아웃을 구성하거나 값들을 변경하였을 때 예상치 못한 오류가 발생하는 경우(위젯이 사라지거나 이상한 곳에 배치되는 경우) 디버깅에 유용한 툴 정도로 해석했습니다. 레이아웃의 구성을 XML..
Android에서의 MVVM은 무엇이고 왜 사용하는가
2020. 4. 6.이전 기록에서 아키텍처 개선을 위한 이야기를 했었다. 개선을 위한 컴포넌트(Component)들을 사용하고, MVVM 디자인 패턴을 적용하기로 했었다. 이번 기록에서는 이 MVVM 디자인 패턴이 무엇인지를 다뤄 볼 예정이다. 관심사 분리 초보 개발자들(본인)이 실수하는 많은 것들 중 하나는, Activity나 Fragment 클래스에 모든 코드를 작성하려 한다는 것이다. 때문에 앱의 동작 속도가 느려질 수 밖에 없고 유지보수가 어렵게 되는것은 덤이며 메모리 관리에도 많은 어려움이 발생한다. 따라서, 최대한 클래스의 의존성을 최소화 하는 것이 좋다. (추후에 의존성 주입에 대한 내용도 포스팅 할 예정이다.) 아직 초보인 본인이 봤을 때는 로직들을 분리하고 의존성을 최소화 하게 되면, 한 로직에서 문제가 발..
Android 아키텍처 컴포넌트를 사용한 구조 개선
2020. 4. 3.Android는 데스크톱 앱과 실행 환경이 매우 다르다. 보통의 데스크톱 앱은 특정 작업 수행 중에 다른 작업을 수행해도 진행중인 작업이 사라지거나 중단되지 않는다. 그러나 Android는 OS의 매우 복잡한 구조 덕분에 앱에서 실행하던 작업이 중단되거나 다시 실행될 수 있다. 개발자는 이를 방지하기 위해 노력해야 한다. 우리는 이에 따라 권장하는 아키텍처를 구성하여 제작하면 사용자에게 좀 더 화려한 이용 경험을 제공해 줄 수 있을 것이다. 이번 기록에서는 아키텍처를 개선하기 전에 Android가 어떤 구성요소로 되어있고, 어떤 문제점이 있기 때문에 개선해야 하는지, 그리고 어떤 디자인 패턴을 사용하여 개선해야 할지를 알아보려 한다. 그래서 왜 개선이 필요한가? 우선, Android는 우리가 흔히 알고 ..
'onMessageReceived' overrides nothing 해결
2020. 3. 30.FCM 버전을 오랜만에 업데이트 한 후 Gradle Sync를 돌리는데 자꾸만 에러가 난다. 고친 소스코드도 없는데... 해당 에러가 나는 부분은 다음과 같다. ... override fun onMessageReceived(remoteMessage: RemoteMessage?) { ... } ... override fun onNewToken(token: String?) { ... } override 쪽에서 에러가 난다. 전혀 문제가 없는 소스코드지만, 업데이트 이후 변경점이 있다. 그냥 null check 부분을 수정해 주면 된다. 아래와 같이.. ... override fun onMessageReceived(remoteMessage: RemoteMessage) { ... } ... override fu..