안드로이드/Debug

IllegalStateException:no event down from INITIALIZED in component androidx.navigation.NavBackStackEntry
원인 Android Composed에서 Navigation이 일어났을 때 발생했습니다. 문제의 코드 navigateToQrMainPage = { navController.navigate("main_page"){ launchSingleTop = true restoreState = false popUpTo(navController.graph.startDestinationId){ saveState = true inclusive = true } } } 해결 From the androiddev community on Reddit Explore this post and more from the androiddev community www.reddit.com 레딧 이슈를 확인해 본 결과 Lifecycle 문제임을 찾..

Unable to add window -- token null is not valid; is your activity running?
원인 Dialog에 context를 넘겨 줄 때 ApplicationContext를 넘겨주면 발생하는 에러 val dialog = BasicDialog(applicationContext) .setTitle("KeepMe에 업데이트가 필요합니다") .setMessage("이 앱을 사용하려면 최신 버전을 다운로드하세요.") .setPositiveButton("업데이트") { startActivity( Intent( Intent.ACTION_VIEW, Uri.parse(appUpdateURL) ) ) } 해결 현재 액티비티의 context를 넣어주거나 fragment일 경우 requireContext()로 context를 가져와 넘겨주면 된다 val dialog = BasicDialog(this) .setTi..

NetworkOnMainThreadException
원인 안드로이드에서 네트워크 작업은 메인 스레드가 아닌 작업스레드에서 해야함 해결 kotlin이면 CoroutinScope(Dispacher.Default).launch{} 로 감싸면 해결 자바면 쓰레드 하나 만들어주면 된다.
![[Retrofit 통신 실패]java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRl7aA%2FbtskJcGkUeV%2FuKo1YF8kB6XHgAsVPyXkoK%2Fimg.webp)
[Retrofit 통신 실패]java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
원인 우리가 Response로 받을 거라 생각했던 타입과 실제 들어온 Response의 타입이 달랐을 때 발생하는 오류 해결 Response의 타입에 맞게 데이터 클래스를 선언해 주거나 오브젝트를 String으로 변환시켜 주는 ScalarsConverterFactory 라이브러리를 사용하거나 둘 중 하나를 택하면 된다. 2번을 선택할 경우 방법은 다음과 같다. 의존성 추가 implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' retrofit 선언부에 추가 .addConverterFactory(ScalarsConverterFactory.create()) val rt = retrofit2 .Retrofit .Builder() .baseUrl(bas..

Key 1 was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
원인 LazyColumn 또는 LazyRow를 쓸 때 각 항목에 고유한 위치값을 안 썼기 때문 LazyColumn에 item을 추가하는 기능을 만들었을 때 발생할 수 있다. 기본 레이아웃일 경우 자체적으로 처리되지만 커스텀일 경우 items의 key 패러미터에 고유한 key값을 넘겨줘야 한다. itemsIndexed( items = cl, key = { index: Int, item: CheckListInfo -> item.hashCode() } ) 나의 경우 key값으로 item의 해시 값을 넣어줬지만 내용이 같으면 해시값도 같으므로 위와 같은 에러가 발생했다. 해결 간단하다. 안겹치는 고유한 키 값을 주면 된다. itemsIndexed( items = cl, key = { index: Int, _: ..
![Expected a boolean but was BEGIN_OBJECT at line 1 column 85 path $[0].visibility](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsVKFc%2FbtsjJUAPhcn%2F066OhNvfzIIHLk03H9qfaK%2Fimg.webp)
Expected a boolean but was BEGIN_OBJECT at line 1 column 85 path $[0].visibility
원인 엔티티에 들어가는 데이터 클래스 프로퍼티의 타입을 바꿈 해결 원래 들어가있던 데이터와 바뀐 프로퍼티의 타입이 충돌을 일으키는 것 이므로 앱 데이터 삭제 후 재 시작

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