Kotlin

    Cannot figure out how to save this field into database. You can consider adding a type converter for it.

    Cannot figure out how to save this field into database. You can consider adding a type converter for it.

    원인 Room이 필드 타입을 인식하지 못해서 발생하는 문제, 보통 코틀린의 Basic Type이 아닌 직접 만든 데이터 클래스 리스트를 사용할 때 발생 Entity 클래스 @Entity(tableName = "checklist") data class CheckListEntity( @ColumnInfo(name = "checklist_info") var checkLists: List ){ @PrimaryKey(autoGenerate = true) var idx: Long = 0 } 데이터 클래스 data class CheckListInfo( //할 일 var checklistContent: String, //초기화 요일 var restartWeek: Set, //수행여부 var done: Boolean =..

    Navigation의 백스택을 관리해보자

    Navigation의 백스택을 관리해보자

    바텀 내비게이션과 내비게이션 컨트롤러를 이용한 프래그먼트의 이동을 구현하다 보면 꼬일 때가 있습니다. 위 상황처럼 홈에서 원 프래그먼트로 바로 이동하게 하면 다시 홈으로 갈 수 없는 것을 볼 수 있습니다. 왜 이런 상황이 발생하는지, 해결 방법이 무엇인지 알아봅시다. 내비게이션 백 스택의 구조 일반적인 내비게이션의 백스택입니다. 프래그먼트를 이동할 때마다 이전 프래그먼트가 백스택에 쌓이는 형식입니다. 그렇다면 바텀 내비게이션의 목적지는 어떨까요? 처음 바텀 내비게이션을 정의하면 목적지가 저장됩니다. 위에 보인 예제처럼 홈에서 임의로 액션을 정의하면 바텀 내비게이션의 목적지에 정의한 액션이 들어가게 됩니다. 따라서 위 gif처럼 바텀 내비게이션으로 홈 화면으로 돌아갈 수 없는 것입니다. 일반 내비게이션 백..

    RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{dcc7ca6 u0 com.***.***/.ble.BleService}

    RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{dcc7ca6 u0 com.***.***/.ble.BleService}

    원인 서비스에서 startForeground 호출 시점이 꼬이면 발생하는 예외 해결 onStartCommand() 에서 호출하던 startFroeground를 onCreate() 로 변경 private fun createNotificationChannel() { ... startForeground(NOTIFICATION_ID, notification) } broadcastUpdate(BleObject.START_FOREGROUND_SERVICE, "startForegroundService") } override fun onCreate() { super.onCreate() createNotificationChannel() } override fun onStartCommand(intent: Intent?, ..

    달리기 경주

    달리기 경주

    프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 분자열 배열 players와 해설진이 부른 이름을 담..

    --- Failed to create image decoder with message 'unimplemented'

    --- Failed to create image decoder with message 'unimplemented'

    원인 Glide SVG이미지 로드 시 발생하는 에러, 버전에 따라 앱이 다운되는 경우도 있다. Glide.with(requireContext()).load(R.drawable.ic_sunny).into(binding.weatherIv) 해결 drawable 정수값 대신 ContextCompat.getDrawable로 호출 fun setImage(drawable: Int){ val image = ContextCompat.getDrawable(requireContext(), drawable) as VectorDrawable Glide.with(requireContext()).load(image).into(binding.weatherIv) } 참고 안드로이드 Glide SVG 이미지 로드 관련 오류 해결 - ..

    Caused by: java.lang.IllegalArgumentException: Char / is not a decimal digit

    Caused by: java.lang.IllegalArgumentException: Char / is not a decimal digit

    원인 StringBuilder에서 get한 값을 바로 digitToInt 했을 때 나온 에러입니다. if(sb[1].digitToInt() == 9) 해결 String -> Int 로 String을 한 번 거쳐줬습니다. if(sb[1].toString().toInt() == 9)

    봉인된 클래스 및 인터페이스(Seald Class & Interface)

    봉인된 클래스 및 인터페이스(Seald Class & Interface)

    봉인된 클래스(Seald Class) 코틀린에서 enum과 함께 두 번째로 잘 사용하지 않는 기능을 한 번 정리해보려고 합니다. 비록 장점과 정의 부분에 있어서 미숙한 부분이 있지만 이해해 주길 바랍니다. 들어가기 전 항상 이런 개념적인 내용을 볼 때 드는 생각은 왜 써야 하는가?이다. 왜? 어디에? 언제? SealedClass의 장점은 when절을 쓸 때 else구문을 사용할 필요가 없다. when절이 값을 반환해야 한다면 else문이 없을 경우 컴파일 에러가 날 수 있다. 하지만 조건분기들을 SealedClass에 넣어놓는다면 컴파일이 가능하다. 이게 장점?이라고 반문할 수 있지만 생각보다 큰 장점이다. 조건 분기에서 else문을 지운다는 의미는 내가 원한 조건 이외의 것을 고려할 필요가 없다는 뜻이..

    Navigation으로 Fragment전환을 쉽게 해보자 (feat.BottomNavigation)

    Navigation으로 Fragment전환을 쉽게 해보자 (feat.BottomNavigation)

    Fragment는 생각만 하면 머리가 아파오지만 안드로이드의 필수적인 기능임은 틀림없습니다. 하지만 화면 전환을 할 때만 되면 골치 아파지죠, 특히 프래그먼트간 전환을 할 때입니다. 기존 액티비티에서 프래그먼트로 이동할 때 FragmentManager()를 이용했습니다. 그리고 프래그먼트 간 전환을 하기 위해 우린 상위 액티비티에서 전환 이벤트를 전부 구현해줘야 했습니다. Activity to Fragment, Fragment to Fragment Fragment란? 사전적 의미로 Fragment란 조각을 의미한다. 우리가 앱을 개발하다보면 액티비티에 부분적인 화면을 추가하고 싶을 때가 있다. 특히, 한 액티비티에서 여러 화면이 전환되게 만들고 싶을 huzit.tistory.com 이런 불편하고 까다로운..