본문 바로가기

전체 글

(105)
[TEKHIT] 오늘의 멘토링 멋쟁이 사자처럼에서 진행하는 안드로이드 앱 스쿨에서 멘토링을 받고 배운 지식들을 정리하는 글 입니다. 👩‍💻 오늘의 할 말개인 프로젝트를 진행하던 중에 startActvity( )를 통한 액티비티 전환 시 전환하려는 액티비티가 두 개 생성되는 문제가 발생하여 멘토링을 요청하게 되었습니다. 매장 정보를 입력하는 RegistStoreInfoFragment 의 서버에 데이터를 저장하는 과정을 주석처리하고 실행을 해본결과 문제없이 동작했습니다. 그래서 이 부분이 문제의 원인임을 확인하였습니다.                                                            서버에 데이터를 전송하는 과정은 다음과 같습니다.  문제의 원인을 생각했을 때 데이터를 저장 하는 작업이 끝나기..
[PROJECT] MulterError: Unexpected field 🚨 Trouble Shooting 프로젝트에서 매장의 메뉴를 추가하기 위해 서버측 코드를 수정하던 중 아래와 같은 에러가 발생했습니다. Multer는 Node.JS에서 파일을 관리하는 모듈인데, 저는 이미지를 저장하기 위해 사용했습니다. 1차적으로 확인한건 multer를 사용하면서 선언한 변수들을 확인했습니다. 이미지를 저장하기 위한 NodeJs 서버의 로컬 저장소의 경로를 지정합니다. // 디스크에 이미지 저장을 위한 multer 설정 const storeMainImageStorage = multer.diskStorage({ destination: '/store_images_volume/main', filename: (req, file, cb) => { const fileName = 'main_img'..
[PROJECT] Fused Location Provider 🚨 Trouble Shooting 프로젝트에서 Kakao Map Api를 사용하기 위해 현재 사용자의 위치를 가져오기 위해서 안드로이드 OS에서 제공하는 LocationManager 시스템 서비스를 이용해 현재 사용자의 위치를 요청하였지만 계속해서 위치를 받아오지 못하는 문제가 발생했습니다. 원인을 분석하는 과정에서 이 API가 다음과 같은 문제점이 있다는 것을 알게 되었습니다. 정확한 위치를 불러오는 기능이 생각보다 배터리를 많이 소모합니다. -> 전력 효율 저하 건물 내부에서 정확한 위치를 파악하기 힘들거나 정확한 위치를 파악하기 힘들 때가 있습니다. -> 정확도 저하 API 자체가 복잡합니다. -> 개발 과정의 복잡성 증가 이에 대한 대응 방안으로 구글에서 서비스 하는 최적의 알고리즘으로 위치 제공..
[Android] 프로퍼티의 초기화 시점이 중요한 이유! 🚨 Trouble Shooting 다음과 같이 context를 매개변수로 전달받는 클래스를 TestActivity에서 호출할 때 다음과 같은 에러가 발생했습니다. 파란 줄을 보시면 context를 전달받을 때 null이 전달되어 NullPointerException 이 발생했습니다. class FusedLocationProvider ( private val context: Context, private val listener: OnLocationUpdateListener ) class TestActivity: AppCompatActivity(), OnLocationUpdateListener { private var fusedLocationProvider = FusedLocationProvider(this..
[PROJECT] 프로젝트에 DataBinding & @BindingAdapter 사용해보기 이번엔 DataBinding과 BindingAdapter를 사용해 Room에서 가져온 이미지를 ImageView에 보여주는 연습을 해보겠습니다. 이 글의 예제 코드들은 제가 진행 중인 프로젝트에서 가져온 코드라 다소 뜬금없는 부분이 있을 수 도 있습니다. 안드로이드 공식 문서 데이터 결합 라이브러리 | Android 개발자 | Android Developers 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 데이터 결합 라이브러리 Android Jetpack의 구성요소. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선 developer.android.com 🎉 DataBinding이란 ? XML Layout 파일과 데이터를 직접 연결해 주는 기술입니다. DataBin..
[TECKHIT] Material3 Text fields 출처 : Tekhit Android App School / Soft campus 윤재성 강사님 공식 문서 Text fields – Material Design 3 Text fields allow users to enter text into a UI. They typically appear in forms and dialogs. m3.material.io 📌 Text fields 기존 안드로이드 컴포넌트 중 EditText와 유사한 동작을 하지만 에러 메시지를 출력하거나 Box형식으로 입력을 받을 수 있는 등 기존의 EditText보다 발전된 컴포넌트 입니다. 📕 주요 속성 - hint : 입력 안내 문구를 표시합니다. - startIconDrawable : 좌측에 표시되는 아이콘을 설정합니다. - end..
[Android] Room Database Migration 🎉 개요 Database를 사용하다보면 필연적으로 데이터 베이스 스키마를 변경하는 상황이 발생합니다. Room은 데이터 베이스 스키마가 변경되면 version을 올려줘야 합니다. 이 때, 데이터 베이스를 마이 그레이션 할 수 있는 방법을 소개하겠습니다. 🎉 Migration 1️⃣ Version Up + fallbackToDestructiveMigration( ) 가장 기본적으로 Migraion할 수 있는 방법은 Version을 올리고 fallbackToDestructiveMigration( ) 메소드를 사용하는 것입니다. 하지만 이렇게 할 경우 기존의 데이터가 모두 삭제된다는 치명적인 단점이 있습니다. fallbackToDestructiveMigration( ) 데이터 베이스 스키마가 변경되었을 때 기..
[Android] Room TypeConverter 📕 Room의 Type 제한 Room에 데이터를 저장할 때 원시 타입( char, int, short, long, float...)과 Wrapping Type만 지원합니다. 그 이유로 공식문서는 다음과 같이 이유를 설명 합니다. 효율성 및 성능 원시 타입과 래핑 타입은 메모리 사용 및 연산 효율성이 더 뛰어나기 때문에 데이터베이스 작업 시 성능을 최적화할 수 있어 객체가 아닌 기본 타입을 사용함으로써 메모리 소비가 감소하고, 데이터베이스 연산이 빨라집니다. Room에서 사용자가 정의한 클래스나 다른 복잡한 타입을 사용하려면 TypeConverter를 사용해 변환해 주어야 합니다. Room을 사용하여 복잡한 데이터 참조 | Android 개발자 | Android Developers Room을 사용하여 복잡..