⛔ 문제사항레트로핏을 연습하는 과정에서 BuildConfig를 찾을 수 없다는 에러가 나타났다.✅ 해결방안해결방법은 비교적 간단한데, build.gradle 파일에서 buildConfig 값을 true로 지정해주고android { namespace = "com.example.myApplication" compileSdk = 34 ... 중략 buildFeatures{ buildConfig = true //여기 viewBinding = true }} gradle.protperties 파일에 값을 또 하나 추가해주면 된다.android.defaults.buildfeatures.buildconfig=true 이렇게 추가해도 안 된다? 안드로이드 스튜디오를 한..
Android
⛔ 문제사항코틀린으로 함수형 프로그래밍을 해보자! 라는 과제에 맞추어 기존에 진행 했던 프로젝트를 리팩토링 하는 겸, 함수로 분리할 수 있는 것들을 최대한 분리하는 과정에서 마주친 문제다.// 달력 다이얼로그 출력private fun dialogCalendar(dateText: String) { val calendar = Calendar.getInstance() val year = calendar.get(Calendar.YEAR) val month = calendar.get(Calendar.MONTH) val day = calendar.get(Calendar.DAY_OF_MONTH) val listener = DatePickerDialog.OnDateSetListener { _..
⛔ 문제사항xml내부에 재사용되는 UI를 include하여 코드를 작성하고 있는데 자꾸 이런 에러가 발생했다.✅ 해결방안원인은 include한 코드와 include 내부 xml 코드의 id값이 달라서 발생하는 문제였다.이렇게 include한 바깥 Activity xml과 내부 Layout xml의 id값을 맞춰주면 해당 에러는 사라지게 된다.그런데, 나는 한 가지 더 문제가 있었는데 바로 include한 TabLayout에서는 id값을 맞춰주어도 에러가 발생한다는 것이었다.원인은 바로 tabItem에 id값을 주어서였는데, tabItem은 원칙적으로 id값을 주지 못하는 게 원인으로 보인다. (버그일수도)id를 사용해서 tabItem값에 접근할 수 없기 때문에 아래 코드처럼 getTabAt 메소드에 in..
⛔ 문제사항fakeDataList.forEachIndexed { idx, itm -> if (idx == position) { fakeDataList.removeAt(idx) mainAdapter.notifyItemChanged(idx) }}forEachIndexed를 통해 List 안의 값을 삭제하려고 했는데, 이 코드가 동작하기만 하면 앱이 강제 종료 되며 java.util.ConcurrentModificationException 과 같은 에러가 나타났다.✅ 해결방안원인은 List나 Map과 같은 컬렉션을 수정하는 도중에 다른 스레드에서 동시에 컬렉션을 수정하려고 해서 그러는 것인데, 쉽게 말하자면 List는 수정되었는데 수정되기 이전의 List에서 forEach가 계속 수행 되고 있기 때문이다...
0️⃣ Lottie Animation?로티 애니메이션은 개발자들이 손쉽게 애니메이션을 구할 수 있는 방법이다. mp4나 gif보다 용량도 적고 조작하기도 쉬운 파일로서 json 또는 lottie 자체 애니메이션 파일로 제공되곤 한다. 무료 로티 애니메이션, 모션 그래픽을 위한 모든 플러그인과 도구를 한 곳에 - 로티파일즈/LottieFi로티파일즈/LottieFiles는 오픈소스 애니메이션 포맷 로티를 제공하는 세상에서 가장 큰 무료 플랫폼입니다. 웹, iOS, 안드로이드, 윈도우를 위한 모션 그래픽 작업을 지원하는 플러그인과 툴을 통lottiefiles.com게다가 공식문서가 정말 잘 되어있어서 어떤 플랫폼에서든 공식 문서 하나만 보면 다 적용하며 따라할 수 있다! 이것이 정말 큰 장점인 것 같다. 덕분..
이미지를 둥글게 만드는 경우는 정말 정말 많다! 필수 기능 중 하나라고 봐도 무방할 정도다. 저렇게 둥근 이미지들이 잔뜩 들어갈 때는 어떻게 만들면 좋을까?1️⃣ res/drawble 폴더에 background 생성이렇게 xml 파일을 생성하여 아래코드처럼 작성하면 된다. 두 가지 방법 모두 잘 작동한다. android:shape="oval" props 값을 주게 되면 손쉽게 원형을 생성할 수 있다. shape 태그 안에 태그를 줌으로 인해서 View의 radius 값을 줄 수 있는데 이때에는 내가 radius를 주려고 하는 원래 View와 dp값을 잘 맞춰주어야한다. 이 점을 유의하자.2️⃣ layout 폴더 내의 xml파일에서 background 적용하기이렇게 background옵션에 방금 dra..
0️⃣ 안드로이드를 사용해본 사람으로서... 지금이야 아이폰을 쓰고 있지만 사실 안드로이드 휴대폰을 사용한지 정말 오래됐다. 10년 넘게 사용하던 Android를 바꾸게 된 계기는 정말 의아하게도 아이패드와의 연동성 때문이었는데 iCloud의 편리함에 깜빡 속아 넘어가게 된 것이다... 아이폰이 갤럭시보다 더 예쁘다, 성능이 좋다 등등의 말들은 제법 많이 들어봤을 것이다. 예쁜 것은 주관적인 것이고 성능은 분명 수치에 기반한 말일테니 철썩 같이 믿고 아이폰을 처음 사용 했을 때의 실망감은 이로 말할 수 없을 것이다. 버그가 나고 렉이 걸리는 부분이 갤럭시와 조금 다를 뿐이지 아이폰이라고 버그가 없는 게 아니었기 때문이다. 그러면서 점점 느끼게 된 점은 '아하, Android나 iOS나 사용자 입장에선 ..
⛔ 문제사항이 Warning 문구는 단순히 텍스트를 하드코딩하지 말란 이야기인데, 단순히 TextView에서만 이러는 건 아니고 Button 등 텍스트가 들어가는 모든 위젯에서는 이러는 것 같다. 전부터 이 거슬리는 워닝을 해결하고 싶었는데 드디어 해결 방법을 알게 되었다!✅ 해결방안res/values/strings.xml 파일 내부에 텍스트를 직접 선언해주고, 다시 파일로 돌아와 내가 하드코딩 했었던 텍스트를 지우고 key 값을 넣어주면 끝이다! 안드로이드가 이렇게 하드코딩을 막는 이유는 다국어지원을 위해서라고 한다. 쉽고 유익한 해결방법...
0️⃣ HTML과 XML이 왜 궁금한데? 본격적으로 안드로이드 공부에 앞서 간단히 강의를 들으며 XML로 UI를 그리니 '어라? 뭔가 HTML이랑 유사한 것 같은데?' 라는 생각이 들었다. MVVM 패턴처럼 UI코드와 로직코드가 나뉘어져 HTML 내부에 직접 인라인 CSS를 작성하는 듯한 느낌을 가장 많이 받았다. 물론 안드로이드를 배우다보면 이 생각의 옳고 그름을 알 수 있겠지만 XML과 HTML이 어떻게 다른지에 대해 궁금해진 계기는 이렇다.1️⃣ HTML이란?HTML은 Hypertext Markup Language 의 약자로 웹페이지가 어떻게 구조화되어 있는지 브라우저가 알 수 있도록 하는, 웹 브라우저를 위한 마크업 언어 이다. 이 HTML은 단순히 텍스트 파일에 불과하고 구조를 설계해주는 언어이..
⛔ 문제사항강의를 들으며 모든 코드를 따라친다 해도 에러가 발생하기 마련인데, 그래도 놓친 부분이 없이 Run을 누르자마자 이러한 에러가 발생하며 앱이 이유없이 꺼졌다. ✅ 해결방안앱이 꺼진 이유는 바로 TODO 를 삭제하지 않았기 때문이다. 주석으로 되어있는 TODO가 아니라서 그런 것 같다... 앞으로 잘 삭제하고 코드를 실행하자.❗출처참고 사이트 : https://wise-99.tistory.com/43 [코틀린] kotlin.NotImplementedError: An operation is not implemented: Not yet implemented코틀린으로 앱을 만들면서 발생한 오류다. 오류가 발생한 부분은 32번 라인이다. 파이어베이스에 연동해서 데이터를 가져오려고 onDataChang..