🐞 null-safe 처리를 했는데도 Text()에서 앱이 터진 이유
·
Android/Error
😲 문제 상황프로젝트 개발 중 갑자기 앱이 터지는 문제가 발생했어요 🥹에러 로그를 살펴보니 Text() 컴포넌트에서 이런 로그가 찍히고 있었습니다java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object referenceat androidx.compose.ui.text.platform.AndroidParagraphHelper_androidKt.createCharSequence(AndroidParagraphHelper.android.kt:70)Compose의 Text()는 내부적으로 문자열 길이를 계산하기 위해 length()를 호출하는데이때 null이 들어오..
[Android/Compose] Android Chip 사용법
·
Android/Study
안녕하세요~ 🎵 오늘은 Android에서 Chip을 사용하는 방법을 정리해보려고 합니다앱을 사용하다 보면 아래와 같은 UI를 종종 볼 수 있습니다이러한 요소를 Chip이라고 부릅니다!이번 글에서는 Chip의 정의와 종류 그리고 구현하는 방법까지 다뤄보겠습니다 🧐 ✏️ Chip이란?🔹 Chip의 정의Chip이란 Material Design 시스템에서 제공하는 UI 컴포넌트로태그, 카테고리, 선택지, 액션 등 작은 정보 단위를 시각적으로 표현할 때 사용합니다 📌 Chip을 사용하면 다음과 같은 장점이 있어요:간결한 정보 표현사용자의 입력/선택 유도공간 절약 🔹 Chip의 종류종류설명예시Assist Chip액션을 보조하는 버튼 형태"주소 검색" 버튼Filter Chip다중 선택 가능한 필터관심사 선택..
[Android/Compose] SGIS API로 단계별 주소 선택기 구현하기
·
Android/Study
안녕하세요! 😊 오늘은 통계청에서 제공하는 단게별 주소 조회 API를 사용하여 주소 선택기를 구현하려고 합니다 프로젝트에서 사용자로부터 정확한 주소 입력을 받아야 하는 상황이 있었고 이를 직접 입력 받는 대신단계별로 선택할 수 있게 선택형 UI로 만들면 더 직관적일 것 같아 SGIS API를 사용하게 되었습니다!✏️ SGIS 주소 API 사용 방법🔸 SGIS API 사용 개요SGIS Developers에서 제공하는 공공 API 단계별 주소 조회 API를 사용하였습니다이 API를 통해 시/도 → 시/군/구 → 읍/면/동 단위로 주소 정보를 불러올 수 있습니다💡 초기 설정 및 테스트는 아래 블로그 참고! [Flutter] 공공 API로 주소 검색 & 주소 선택기 만들기 (BLoC)공공 API로 주소..
[Jetpack Compose] HorizontalPager로 ViewPager 구현하기
·
Android/Study
이전에 xml로 구현했던 프로젝트를 compose로 리팩토링하게 되었다리팩토링을 진행하면서 이전에 xml로 구현했던 요소들을 compose로 바꾸는게 흥미롭기도 어렵기도 했는데오늘은 그 중에 ViewPager를 Compose에서 어떻게 구현하는지 작성해보려고 한다! 🧐 ✏️ Compose에서 ViewPager 구현하기Compose에서는 기존의 Viewpager 대신에 HorizontalPager와 VerticalPager를 사용한다가로 스크롤 ➡️ HorizontalPager세로 스크롤 ➡️ VerticalPager이번 포스팅에서는 HorizontalPager를 중심으로 다룰 예정이다 ✏️ HorizontalPager 기본 사용법HorizontalPager를 사용하려면 우선 pagerState가 필요하..
[Jetpack Compose] Scaffold 사용법
·
Android/Study
안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 Scaffold라는 컴포저블이 기본적으로 설정되어 있다class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { MyApplicationTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Greeting( ..
[Jetpack Compose] 위치 권한 요청 및 처리하기
·
Android/Study
오늘은 앱에서 위치 권한을 요청하고 권한 승인 여부에 따라 적절한 동작을 수행하는 코드를 작성해보려고 한다! 아래의 코드를 작동하게 할 예정 🧐 Button(onClick = { if (locationUtils.hasLocationPermission(context)) { // 권한 허용시 locationUtils.requestLocationUpdates(viewModel) } else { // 권한 거부시 requestPermissionLauncher.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ..
[Jetpack Compose] remember와 mutableStateOf
·
Android/Study
Jetpack Compose를 학습하면서 remember와 mutableStateOf를 자주 사용하는데 둘의 역할이 헷갈려 정리해봤다 🤓 우선 Jetpack Compose는 선언형 UI를 작성하는 방식으로기존의 XML 기반 UI 작성법과는 달리 상태가 변할 때마다 리컴포지션이 일어난다는 특징이 있다리컴포지션이 발생할 때마다 컴포넌트 내부의 변수들이 초기화되기 때문에 이전 상태값을 기억하기 위해 remember와 mutableStateOf를 사용한다** 리컴포지션(recomposition): Compose가 상태 변경을 감지하고 해당 상태와 관련된 UI만 다시 생성하는 것✏️ remember와 mutableStateOf의 역할🔸 remember리컴포지션이 발생해도 상태를 기억하도록 도와주는 키워드Com..