Android/note (24) 썸네일형 리스트형 Firebase Auth + 구글 / 페이스북 로그인 (with Compose) 간간히 다운로드수가 발생하지만 정작 가입하는 사람이 없다! 이메일로 가입해야하고 -> 이메일로 로그인해야하니 귀찮아서 더이상 진행을 안하는 것 같다는 생각이 들었다.그래서 파이어베이스와 연동해서 사용할 수 있는 구글/페이스북 로그인을 구현해보았다.사실 카카오/네이버 로그인도 넣어보고싶은데 서버가 있어야 진행이 가능할 것 같아서 일단은 보류하기로 했다! PlayStore Senty - 선물 기록 어플리케이션 - Google Play 앱소중한 사람들과 정성스레 주고받은 선물을 기록해보세요.play.google.com 결과화면 원형 아이콘으로 깔끔하게 버튼을 만들어주었다. 구글 버튼은 아래의 링크에서 다운로드 받아 사용했고, 로그인 브랜드 가이드라인 | Google ID 플랫폼 | Google for.. Coroutine + LiveData 를 통해 데이터 전달받기 그런데 이전 데이터도 전달되는 .. 문제 상황 첫번째, dp 알고리즘 클릭 >> 두번째, 그래프 이론 알고리즘을 클릭하면 이전에 선택한 dp 관련 문제들이 로그에 찍히고 그 이후에 그래프 이론 알고리즘 관련 문제들이 로그에 찍히는 것을 알 수 있다. 다른 알고리즘을 클릭하고 문제를 보고를 반복하다보면 exception 이 발생하는 문제를 마주하게 되었다. 문제 해결 과정 1️⃣ ViewModel 에서 LiveData 에 값을 세팅하는 과정을 확인 네트워크 통신을 통해 가져온 데이터를 가공해서 _problems.value 를 통해 값을 세팅해주었다. 하지만 그런데도 이전 값과 + 최신 값이 로그에 똑같이 찍혔다. 무엇을 확인해봐야 하는지 감이 잡히지 않아서 챗GPT 에게 물어봤고, 하나씩 확인해보기로 했다. 2️⃣ Observer 등록 여부.. URL 에 콜론(:), 더하기(+)와 같은 문자가 포함되었을 때 이번 문제는 랜덤리즘 프로젝트를 진행하다가 발생한 문제 .. 문제상황 서버에 문자열 관련한 문제들을 받기 위해서 Request로 solvable:true+tag:strings 의 쿼리를 전송했는데, 계속해서 원하는 값을 받을 수 없었다. 예상한 응답 실제로 받은 응답 2220 개의 문제 개수와 첫 문제가 1013번 이어야함 2220개가 아닌 전체 총 문제의 개수(29031개)와 가장 첫 문제인 1000번부터 전달받음 문제 해결 과정 가장 먼저 의심되었던 부분은 주소에 : , + 와 같은 문자가 포함되어있었는데 무슨 뜻인지 알지못해서 아래와 같이 그냥 하나의 문자열로 전달했다. val requestQuery = "solvable:true+tag:$tagKey" 이 부분이 문제인걸까? 싶었는데 쿼리로 어떻게.. [Android] Parameter specified as non-null is null 문제 상황 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter think 아이템 삭제 버튼을 클릭하면 NullPointerException 발생 해결 과정 첫번째로 했던 일은 Logcat 을 살펴보면 링크로 ThinkPresenter 의 getThink() 메소드를 가리키길래 거기서 문제가 있나 싶었다. 그런데 삭제를 했는데 getThink() 가 다시 호출이 되나? 싶어서 아래의 사진과 같이 삭제를 했을때의 흐름을 살펴보았다. 예상했던 화면 흐름은 삭제를 마치고 popBackStack() 을 하면 바.. [Android] Room Database 버전 올리기 그런데 오류를 곁들인 .. (Migration didn't properly handle) 버전 관련해서 포스팅했는데 버전을 또 올려?!?! [ 버전 업그레이드 하는 이유 ] 처음에 하나의 테이블(주제)을 만들고 기능을 추가하다보니 또 하나의 테이블(생각)을 만들고 .. 그러다보니 테이블간에 외래 키를 설정해주었어야 하는데 그걸 안해줘서 .. 초기화를 하려고하면 주제 삭제 -> 생각 삭제 -> 코멘트 삭제(또 추가된 테이블) 이렇게 플로우가 되는 것임 .. 일단 주제 삭제 -> 생각 삭제를 진행하면서는 외래 키를 생각해내지 못해서 코드로 작성했었다. override fun deleteAllTopic() { CoroutineScope(Dispatchers.IO).launch { var topicListCount = 0 var thinkListCount = 0 topicRepository.getT.. [Android] EditText 의 데이터 Intent 로 받아오기 [ 문제 상황 ] EditText 를 통해 사용자 입력을 받아 Intent 로 데이터를 넘겨 받아오는 과정에서 getStringExtra()를 사용하면 데이터가 null 이 되는 것을 알게되었다. 이유는 무엇일까? [ 해결 과정 ] 디버깅을 통해 일단 (1) 데이터가 잘 전달되는지 (2) 잘 받아와지는지 확인하였다. 1) 데이터가 잘 전달되는지 확인하기 moveTopicList 는 TopicListFragment 로 데이터를 전달해주는 Intent 객체이다. mExtras 를 확인해보면 Bundle 안에 topic=주제입력 으로 잘 들어가있는 것을 확인할 수 있다. 2) 데이터가 잘 받아와지는지 확인하기 데이터를 받는 화면인 TopicListFragment 에서 디버깅해보면 일단 해당 Intent 의 m.. [Android] MVP 디자인 패턴에서 View 와 Presenter 는 왜 꼭 1:1로 대응되어야 할까? 디자인 패턴을 공부할때면 MVP 패턴에는 항상 View 와 Presenter 가 1:1로 대응되어야 한다고 설명이 되어있는 것을 볼 수 있다. 그런데 왜? 왜 1:1로 대응되어야 하는지, 1:1이 아니면 어떻게 되는지에 대해서는 설명을 잘 보지 못했던 것 같다. 실제로 안드로이드 면접을 봤을 때 이와 관련해서 질문을 하셨었다. MVP는 View 와 Presenter 가 1:1로 대응되어야 한다고 하셨는데, 왜 1:1로 대응되어야 하는걸까요? 1:1로 대응되지 않으면 안되는걸까요? 공부했던대로 MVP는 1:1로 대응되어야합니다~ 라고 대답만 드렸었지 1:1이 되면 안되는 부분에 대해서는 생각해보지 않았기 때문에 답변을 못했었다. 그 이유를 About 프로젝트를 하면서 조금은 알 것 같았다. about 프로.. [Android] Room Database 마이그레이션 도오전 2개의 테이블만 가지고 있던 나 ... 나의 조그만 데이터베이스 .. 그런데 1개의 테이블을 더 추가해야하는데 추가하려면 데이터베이스 마이그레이션을 해야한다고 한다! 그럼 레쯔고 ...! 참고한 사이트는 공식문서에 있는 Room 데이터베이스 이전 관련 내용 Room 데이터베이스 이전 | Android 개발자 | Android Developers Room 라이브러리를 사용하여 데이터베이스를 안전하게 이전하는 방법 알아보기 developer.android.com 첫번째 시도 : 자동 이전 말이 자동이전 .. 너무 쉬울 것 같았고 추가해줘야 할 것들도 얼마 없었다 @Database( version = 2, entities = [User::class], autoMigrations = [ AutoMigration.. 이전 1 2 3 다음