분류 전체보기

    Unable to create instance of interface androidx.compose.runtime.MutableState. Registering an InstanceCreator or a TypeAdapter for this type, or adding a no-args constructor may fix this problem.

    Unable to create instance of interface androidx.compose.runtime.MutableState. Registering an InstanceCreator or a TypeAdapter for this type, or adding a no-args constructor may fix this problem.

    원인 Gson이 Json객체를 MutableState 인터페이스로 역직렬화 할 수 없어서 발생하는 문제 Gson은 인터페이스를 직접 인스턴스화 하지 못하므로 해당 인터페이스를 직접 처리할 수 있는 커스텀 인스턴스 생성자(InstanceCreator), 커스텀 타입 어댑터(Type Adapter)를 등록해야함 해결 entity에 들어가는 DataClass의 프로퍼티 중 MutableState를 쓰던게 있었음 data class CheckListInfo( //할 일 var checklistContent: String, //초기화 요일 var restartWeek: Set, //수행여부 var done: Boolean = false, //애니메이션 visivle var visibility: MutableSta..

    Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number.

    Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number.

    원인 Room에서 스키마 바꾸고 바로 실행하면 볼 수 있는 오류. 무결성 침해됬다고 나오는 오류다. 해결 방법은 2가지다. 배포 전 휴대폰 설정 -> 애플리케이션 -> "본인이 만든앱" -> 저장공간 -> 데이터 삭제 로 직접 로컬 DB를 날려버리면 된다.(권장) 배포 후 만일 배포된 어플이라면 데이터베이스 마이그레이션을 통해 데이터베이스 버전을 높일 수 있다.

    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 =..

    Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)

    Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)

    원인 의존성 문제이거나 코틀린 버전 문제 중 하나 해결 프로젝트 build.gradle의 코틀린 버전을 변경 id 'org.jetbrains.kotlin.android' version '1.7.20' apply false 아래로 변경 id 'org.jetbrains.kotlin.android' version '1.8.10' apply false 버전에 맞춰서 코틀린 컴파일러도 변경 아래 사이트 참고 https://developer.android.com/jetpack/androidx/releases/compose-kotlin

    Navigation의 백스택을 관리해보자

    Navigation의 백스택을 관리해보자

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

    java.lang.NullPointerException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment

    java.lang.NullPointerException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment

    원인 BottomNavigation을 추가하던 중 val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainer) as NavHostFragment 해결 private fun setBottomNav(){ val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainer) as NavHostFragment //바텀 네비게이션에 들어갈 네비게이션 컨트롤러 정의 val navController = navHostFragment.findNavController() binding.bottomNav.setupWithNavController(na..

    Firebase Crashlytics 시작하기

    Firebase Crashlytics 시작하기

    앱을 개발하다 보면 필드 테스트를 해야 하거나 배포 후 에러 관리를 해야 합니다. 그럴 때 필요한 게 좋은 에러관리 플랫폼입니다. 파이어 베이스는 이것마저 무료로 제공하고 있습니다. https://firebase.google.com/docs/crashlytics/get-started?platform=android&hl=ko#add-sdk 방법 프로젝트 추가방법에 관해선 지난 게시글을 보시는 걸 추천드립니다. Firebase 시작하기 Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com 파이어베이스에 개인 프로젝트를 추가하는 방법에 대해 다뤄 huzit.tistory.com 앱에 Crash..

    Firebase 시작하기

    Firebase 시작하기

    plugins { // ... id("com.google.gms.google-services") version "4.3.15" apply false }​ Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com 파이어베이스에 개인 프로젝트를 추가하는 방법에 대해 다뤄볼까 합니다. 파이어베이스에 대해 간단히 소개하자면 개발자에게 편리한 기능을 "무료로" 쓸 수 있는 아주 위대한 플랫폼입니다. 특히 애널리틱스나 크래시리틱스는 앱을 배포하고 관리함에 있어서 아주 강력한 기능이기 때문에 꼭 추가하는 걸 추천드립니다. 파이어 베이스 프로젝트 생성 파이어베이스에 회원가입 후 콘솔로 이동하면 아래와 같은..