- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- coroutine
- blog
- PR
- 진짜일본어
- pullrequest
- androidstudio
- posting
- GIT
- 진짜학습지
- 일본어문법
- jlpt
- github
- n3문법
- rxjava
- 안드로이드
- 일본어기초
- CustomTab
- 진짜학습지후기
- 책추천
- KotlinInAction
- errorhandling
- Android
- Kotlin
- 코틀린
- 학습지
- 책리뷰
- webflux
- suspend
- 인공지능
- ai
목록안드로이드 (74)
코딩하는 개굴이
Android 개발을 하면서 과정에서 제일 많이 경험하는 과정 중에 하나가 로그를 이용한 분석일 것이다. 로그는 실시간으로 앱을 디버깅하며 문제를 분석하는데 매우 중요한 역할을 한다. 이번에 Android Studio 가 Eel 로 업데이트되며, 더 잘 활용할 수 있는 방법을 알아보도록 하자! 창 띄우기 Locat 창은 하단의 탭에서 확인할 수 있겠지만, 만일 없다면 View> Tool Windows > Logcat 에서 켤 수 있다. 이번 Android Studio eel 에서 로그 캣을 처음 킨 사람이라면 새삼 달라진 UI 에 당황할 수도 있을것이다. (사실 본인이 그러하여, 해당 포스팅을 작성하게 되었다.) 여러 창 띄우기 로그 탭에서 + 를 누르거나, 특정 탭에서 split right 등을 수행하..
개발하면서 Radio Button 을 사용하게 되었는데, 생각 외로 이상한 현상이 있었다. 어느 버튼이 눌린 것인지 알아야하는거면 position 으로 radio group 에서 listener 를 달면 되겠지? 라고 생각하며 xml 을 이리 짜둔 상태에서 실행해보니, 재미있는 현상이 발생하더라. 동시에 여러개가 선택되는 것이 아닌가? (본래 Radio Button 이란 CheckBox 와는 달리, 한번에 하나만 선택될 수 있도록 하는 특징이 있다.) 생각보다 원인은 쉬운 것이었다. 아래 xml 에서 어떤 것이 잘못된 건지 알 수 있을까? 바로, RadioButton 에 id 를 지정하지 않은 것이 원인이었다. 따라서 listener 도 돌지 않고, 한번에 하나만 선택되는 것도 되지 않았던 것이다. 아래..
여러 사람들과 동일한 프로젝트로 협업을 진행하다보면, 어떤 사람들은 엔터를 어디에 치고 줄바꿈은 어떻게 하는지 이런 사소한 것들부터 전반적인 구현 방식이 달라지는 경우가 종종 생긴다. 이를 통일성 있게 만들고 가독성과 유지보수성을 높이기 위해서 팀에서 문서를 공유하거나, PR 등의 커뮤니케이션으로 개발자들이 직접 확인하기도 하지만, 하나하나 세세히 확인하기란 불가능에 가깝다. 이런 경우, 특정 언어 혹은 가이드의 컨벤션을 따를 수 있도록 하고 구조적인 문제가 없는지 검사해주는 Lint 도구를 사용할 수 있다. 그 중에서도 KtLint 라는 것을 Android 프로젝트에 적용하는 방법에 대해 이번 포스팅에서 정리해보고자 한다. KtLint란? KtLint 는 Kotlin 언어의 공식 컨벤션을 준수하여 코드..
JAXB JAXB 는 (Java Architecture for XML Binding) Java Object 를 XML 로 직렬화하고, XML 을 JAVA Object 로 역직렬화 해주는 JAVA API 로, JDK6~9 은 내장되어있으므로 라이브러리를 추가할 필요가 없다. marshalling: JAXB 에서 JAVA 객체를 XML 로 변환하는 작업을 말하며, JAXB 는 이를 위해 Marshall 클래스를 제공한다. 일반적인 JAVA 코드 하에서는 아래와 같이 사용할 수 있는데, try { JAXBContext context = JAXBContext.newInstance(Books.class); Marshaller marshaller = context.createMarshaller(); marshall..
매번 우리가 PR 을 올리기 전 해야하는 것들이 있다. 그게 무엇일까?? 주석을 지우거나, 코드의 변수 네이밍을 확인하거나 등의 과정도 중요하지만, 까먹지 말아야할 것들 중 하나는 Optimize Import 와 Reformat Code 이다. 자주 PR 에서 언급되는 부분이자 확인을 한다고 하더라도 파일마다 수행되어야하기 때문에, 까먹기 쉬운 부분이기도 하다. 그렇기에, 자동으로 수행될 경우 더할나위 없이 편하게 사용할 수 있기도 하다. 그래서 이번 포스팅은 저장에 해당하는 ctrl + s(mac 의 경우 ⌘+s) 에 Reformat, Optimize 를 추가해서 저장 시, 이들이 한꺼번에 동작할 수 있도록 해보려한다. 기존 Save All 의 Shortcut 변경하기 Preference > Keyma..
해당 글을 정리하게 된 이유를 본론에 들어가기 앞서 잠시 얘기해보자면, 코드 작성 시 당황했던 것이 있었기 때문이다. 서론에 관심이 없다면 아래 Return 에 대한 정리로 바로 넘어가도 된다. 아래 코드의 1번과 같이 코드를 작성하고, “EFGH” 가 출력될 것이라고 생각하고 테스트는 따로 해보지 않은 상태로 PR 을 올렸었다. 그러나, 차후 PR 을 통해 return 이 sample 을 반환할 것이라는 코멘트를 받았다. 그제서야 실행해본 결과 1번이 let을 반환하지 않는다는 것과, 2번처럼 라벨을 명시한 return 을 해야 의도적으로 동작시킬 수 있다는 것을 알게 되었다. 그리하여 본인은 Return 에 대해 좀 더 명확하게 정리 할 필요성을 느끼게 되어서 해당 포스팅을 작성하게 되었다. // 1..
targetSdkVersion을 올리려했더니 이 에러가 나오더라. FATAL EXCEPTION: pool-11-thread-1 Process: ..., PID: 16791 java.lang.IllegalArgumentException: ...: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e..
앱의 설정 화면은 개발자로써 제일 필요하면서 제일 구현하기 꺼려지는 것이기도 하다. 항목에 대해 일일이 이벤트를 넣어야하기 때문인데, 심지어는 DB 혹은 Preference 를 쓰기에 간단하지만 귀찮기 그지없다. 보통, 특정 설정 값을 사용자로부터 세팅 받고 그것을 계속 저장하며 그에 따른 앱의 동작을 제공해야 하는 단순한 동작을 하는데, 이를 쉽게 구현하는 방법인 PreferenceFragmentComponent에 대해 알아보도록 하자. PreferenceFragment 란? 설정 화면이 크고 복잡할 경우 사용자는 원하는 세팅을 쉽게 찾거나, 개발자는 이러한 화면을 구성하기 어렵다. 다라서, 이런 구성을 쉽게 수행하기 위해 Preference Library 에서는 PreferenceFragmentCom..
Picasso 를 사용하다가 Coil 라이브러리로 마이그레이션을 하기로 함에 따라 Coil 의 사용법 및 에러 핸들링 관련하여 포스팅을 해보려한다. Coil 이란? coil 은 Kotlin Coroutin 으로 만들어진 Android 백엔드 이미지 로딩 라이브러리이다. coil 외에 url 및 File path 등의 이미지를 로딩하기 위한 라이브러리는 Picasso, Glide 등 다수 존재하지만, 본인은 Coil 을 적용해보려한다. Migration 및 적용하기 implementation("io.coil-kt:coil:2.2.2") implementation("io.coil-kt:coil-gif:2.2.2") //coil 에서 gif 적용을 위한 implementation 으로 선택사항 기존의 31 이..
RxJava 코드를 보는데, subscribeOn과 observeOn이 함께 쓰이는 것을 보고 둘이 무슨 차이이고 어떤 동작을 하는 것인지 궁금하여 한번 정리해 보았다. subscribeOn Observable 이 데이터 흐름을 발생시키고 연산하는 스레드를 직접 지정할 수 있다. observeOn Observable 이 Observer 에게 알림을 보내는 스레드를 지정할 수 있다. 이렇게 얘기하면 잘 와닿지 않을 것이다. 사용 시, 둘의 차이점이 어떤지 더 자세히 알아보자. // # 1 myService.getUsers() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .flatMap(Observable::fromIter..