huzit
___을 입력해주세요
huzit
전체 방문자
  • 분류 전체보기 (137)
    • 안드로이드(Compose) (10)
      • UI (4)
      • 개념 (6)
    • 안드로이드 (50)
      • 기본개념 (6)
      • 응용 (4)
      • Debug (18)
      • Binding (3)
      • RecyclerView (5)
      • Firebase (6)
      • Retrofit (1)
      • Activity & Fragment (4)
    • 코틀린 (22)
    • 코딩테스트 (38)
      • 백준 (10)
      • 프로그래머스 (28)
    • 일상 (6)
    • CS 지식 (4)
    • 라즈베리파이 (7)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 프로그래머스
  • FCM
  • IFTTT
  • Android
  • gts4mini
  • 브레빌 밤비노 플러스
  • jetpack
  • 코틀린
  • firebase
  • RecyclerView
  • Java
  • 공돌카돈
  • compose
  • Retrofit
  • docker
  • Kotlin
  • recyclerView ClickEvent
  • 공돌이파파
  • Debug
  • 라즈베리 파이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
huzit

___을 입력해주세요

IllegalStateException:no event down from INITIALIZED in component androidx.navigation.NavBackStackEntry
안드로이드/Debug

IllegalStateException:no event down from INITIALIZED in component androidx.navigation.NavBackStackEntry

2023. 9. 6. 08:54
728x90

원인

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 문제임을 찾았습니다.

 HACK: Fix You cannot access the NavBackStackEntry's ViewModels until it is added to the NavController's back stack (i.e., the Lifecycle of the NavBackStackEntry reaches the CREATED state). Using hiltViewModel() does NOT work!

요약하면

NavBackStackEntry의 라이프사이클이 Created 상태가 될 때까지 NavBackStackEntry의 ViewModel에 액세스 할 수 없다

공식문서의 Compose Navigation의 패치내역을 보면 다음과 같은 내용이 있습니다.

버그 수정의 1번을 보시면 우리가 직면한 문제와 동일한 것을 알 수 있습니다. 

따라서 버전을 올리면 쉽게 해결될 문제이지만 제가 사용하고 있는 내비게이션은 워치용 내비게이션입니다.

implementation "androidx.wear.compose:compose-navigation:1.2.0"

컴포즈 내비게이션의 문제라고 파악되고 이후 버전에선 해결된 문제이지만 이 시점에서 선택할 수 있는 방법은 2가지입니다.

1. IllegalStateException을 예외처리하고 실행하는 것

2. 외부 Navigation 라이브러리를 사용하는 것

주어진 시간이 많다면 라이브러리를 사용하는 방법을 생각해 볼 수 있지만 간단하게 처리하고 다음 작업으로 넘어가야 하므로 예외처리 해주었습니다.

navigateToQrMainPage = {
    try {
        navController.navigate("main_page")
        {
            launchSingleTop = true
            restoreState = false
            popUpTo("main_page") {
                saveState = false
                inclusive = false
            }
        }
    } catch (e: IllegalStateException){
        e.printStackTrace()
    }
},
728x90
저작자표시 (새창열림)

'안드로이드 > Debug' 카테고리의 다른 글

Unable to add window -- token null is not valid; is your activity running?  (0) 2023.08.02
NetworkOnMainThreadException  (0) 2023.06.28
java.lang.OutOfMemoryError: Failed to allocate a 186909536 byte allocation with 25165824 free bytes and 134MB until OOM, target footprint 152658392, growth limit 268435456  (0) 2023.06.26
[Retrofit 통신 실패]java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $  (0) 2023.06.20
Key 1 was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.  (0) 2023.06.14
    '안드로이드/Debug' 카테고리의 다른 글
    • Unable to add window -- token null is not valid; is your activity running?
    • NetworkOnMainThreadException
    • java.lang.OutOfMemoryError: Failed to allocate a 186909536 byte allocation with 25165824 free bytes and 134MB until OOM, target footprint 152658392, growth limit 268435456
    • [Retrofit 통신 실패]java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
    huzit
    huzit
    simple is best

    티스토리툴바