728x90
반응형
Compose에서 페이지 이동을 할때 데이터를 넘기기 위해서 아래의 코드를 실행할때 에러가 발생했습니다.
navHostController.currentBackStackEntry?.savedStateHandle?.set(key = "data", value = data)
에러 내용은 아래와 같습니다.
java.lang.IllegalArgumentException: Can't put value with type class com.syk531.monitoring.dto.Data into saved state
at androidx.lifecycle.SavedStateHandle.set(SavedStateHandle.kt:290)
해당 오류는 SavedStateHandle이 직렬화 가능한 타입만 저장할 수 있기 때문에 발생합니다. SavedStateHandle은 주로 기본 타입 (예: Int, String) 또는 Parcelable 또는 Serializable 인터페이스를 구현하는 타입만 저장할 수 있습니다.
저는 Parcelable 인터페이스를 구현하게 수정해서 에러를 해결했습니다. Parcelable 인터페이스는 안드로이드에 최적화되서 Serializable 보다 빠르고 메모리 사용량이 적습니다. 하지만 개발자가 직렬화/역직렬화 로직을 직접 구현해야 합니다.
해결 과정
1. build.gradle 플러그인 추가
plugins {
id("kotlin-parcelize")
}
해당 플러그인을 추가하고 Parcelize 어노테이션을 사용하면 직렬화/역직렬화 로직을 자동으로 생성해줍니다.
2. @Parcelize 어노테이션 추가
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class Data(
val name: String,
val propose: String,
val linkUrl: String
) : Parcelable
참고자료
https://stackoverflow.com/questions/61166786/how-to-save-livedata-into-savestatehandle
728x90
반응형
'개발 > 안드로이드앱' 카테고리의 다른 글
[Jetpack Compose] 컴포즈 시 한번만 실행하기(리컴포지션 시 실행 안하기) (0) | 2024.07.06 |
---|---|
진동 마사지 앱 개발 및 출시 (0) | 2024.06.28 |
구글 플레이 콘솔 앱 등록 실패 수정(잘못된 개인정보처리방침) (0) | 2024.06.25 |
진동세기가 안 변하는 현상 (0) | 2024.06.20 |