안드로이드

    [Android] MVVM ViewModel 오류 : Can't access ViewModels from detached fragment 해결방법!

    MVVM 패턴을 기반으로 프로젝트를 진행하던 중, 아래와 같은 오류가 발생하였습니다. JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception java.lang.IllegalStateException: Can't access ViewModels from detached fragment Detached된 Fragment에서 ViewModel에 접근할 수 없다는 내용인데요... 무슨 뜻인지 해석했음에도 불구하고 몇 시간의 삽질을 해야만 했습니다..ㅎㅎ 곰곰이 생각해보니 Android Lifecycle을 조금만 생각해봤다면 금방 해결했을텐데 말이죠.. 😅 어떤 코드에서 오류가 발생하였는지 함께 살펴보겠습니다. 🎈 class M..

    [Android] 카카오맵을 2개 이상 ADD했을 때 발생하는 오류 대처 방법! DaumMap does not support that two or more

    안드로이드 개발 중, 저를 포함하여 카카오맵 API를 사용해보신 분들이라면 충분히 겪으셨을만한 오류입니다. 카카오측에서 카카오맵은 MapView 내부 구현 구조 및 OS 제약으로 인해, '한 화면에 동시에 2개 이상을 띄우는 것이 불가능' 하다고 합니다! 만일 2개 이상의 맵뷰를 생성한다면 아래와 같은 예외가 발생할 것입니다. DaumMap does not support that two or more net.daum.mf.map.api.MapView objects exists at the same time 말 그대로 'MapView는 동시에 2개 이상 존재할 수 없다'는 의미로 해석됩니다. 그럼 어떻게 위와같은 오류를 해결할 수 있을지 알아보겠습니다. 기본적인 개념은 이렇습니다. A 액티비티에서 B 액티..

    [Android][어따세워] 음성인식으로 주차장을 검색해보자! STT(Speech To Text) SpeechRecognizer

    이번 포스팅에서는 계속해서 '어따세워' 프로젝트의 구현 파트를 다뤄볼 것이다. 주차장을 리스트를 검색할 때, 주차장 명을 직접 타이핑하여 검색할 수도 있겠지만, 사용자의 편의를 위해 음성인식 검색까지 구현해보고자 하였다. (실행 결과는 코드 맨 아래에 있습니다.) . . . 우선 음성인식 기능을 구현하기 위해서 Manifest에 RECORD_AUDIO 권한을 추가해주어야 한다. binding.searchBarContainer.voiceButton.setOnClickListener { PermissionHelper.checkRecordPermission(this@SearchActivity) { // 권한 승인된 상태라면 openVoiceDialog() // 음성인식 다이얼로그 오픈 } } @Suppress..

    [Android][어따세워] [1] Android MVVM 회원가입&로그인 - 파이어베이스를 사용하여 계정을 등록해보자!

    이번 시간에는 계속해서 '어따세워' 앱의 회원가입 및 로그인 기능을 구현해보자! 로그인 부분은 크게 2가지로, '파이어베이스를 통한 구글, 페이스북 로그인', '카카오 SDK를 사용한 카카오 간편 로그인 기능' 을 구현할 수 있다. (이 외에도 더 다양한 로그인 방법이 존재하지만, 프로젝트에서는 크게 2가지로 국한시킵니다.) 이 포스팅에서는 구글 로그인만 포스팅을 할 것이며, 다른 로그인 기능들은 추후 이어서 포스팅할 계획이다. 우선, 미리 디자인 해놓은 레이아웃 화면이다. 포토샵을 사용하여 버튼을 적절히 디자인하였고, 배경 GIF는 상업용 사이트에서 다운받았다. 제목과 부제목란은 임의로 디자인하였다. (추후 변경 예정) 디자인은 나름 만족한다. (❁´◡`❁) 이제 파이어베이스를 들어가서 회원가입에 필요..

    [Android] startActivityForResult() depreacted 해결 : ActivityResultContracts

    토이 프로젝트를 진행하던 중 startActivityForResult를 사용할 일이 생겨 onActivityResult와 함께 오버라이드를 한 결과... 위 사진과 같이 deprecated 되어 더 이상 지원하지 않는다는 것을 알게 되었다. 조금 더 자세히 알아보니 2020년 5월 기준으로 deprecated 되었다고 한다. 사라진 이유는 프로젝트 규모가 커질수록 onActivityResult 메소드 안에 들어가는 코드의 양이 늘어나기 때문이다. 예를 들어, onActivityResult 메소드에서 requestCode에 따라 분기를 나누어 로직을 수행하는데, 그 안에서도 조건에 따라 분기가 나뉘면 클린 코드에서 점점 멀어지게 될 것이다. 이러한 문제를 해결하기 위해서 ActivityResultContr..

    [Android][0] MVVM 패턴이란?

    * 본 내용은 스스로 학습한 내용을 정리한 게시글입니다. * 오늘부터 Android의 MVVM 패턴에 대하여 정리해보려고 한다. 이미 기존에 대략 공부를 해보긴 했지만, 지식이 너무 얇팍하고 부족함을 느껴 글로 정리해보려고 한다. MVVM 패턴을 사용해야 하는 이유 기존에 Android 앱을 개발하다보면 Activity 하나에 모든 기능을 쏟아붓고 방치해두다가, 며칠 지나서 수정할 일이 생겨 프로젝트를 열어보면 내가 작성한거지만 무슨 용도로 해놓은 메소드인지, 클래스인지 구분하기 어려울 정도로 체계적이지 않았다. 그러다보니 기능 추가 및 수정시 다시 소스코드를 분석해야 하므로 시간이 오래 소요되는 불필요한 상황이 만들어진다. 이런 코드를 흔히 스파게티 코드(spaghetti code)라고 부른다. (코드..

    [인공지능] 싸지방 코딩 학습주제 정하기

    싸지방에서 인공지능(AI) 코딩하기 오늘부터 이 블로그에 내가 코딩하고 공부하는 과정들을 글로 남겨보려고 한다. 첫번째 이유로는, 내가 이만큼 공부했다는 걸 남기기 위함이고 두번째 이유로는, 인간은 망각의 동물.. 까먹었을 때 다시 공부하기 위함이다. 하지만 무려 코딩 환경은 싸지방이라는 현실...ㅠㅠㅠ 왜 싸지방에서까지 코딩을 하냐 물어본다면 답변은... 본인 성격상 시간을 허투루 보내는걸 못 참기 때문..ㅎㅎ!! 20대 초반을 군대에서 가만히 앉아서 날릴 수만은 없다!! 우리 부대는 특성상 휴대폰을 사용할 수 없는 곳이지만, 그만큼 싸지방을 다양한 시간대에 많이 이용할 수 있는 환경이다. 오히려 좋아~~!! 개인정비 때마다 드러누워서 핸드폰만 하다 보면 내 성격에 벌써 불안증세가 왔을 것이다ㅋㅋ 그렇..