본문 바로가기

Android/note

(23)
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..
[Android] SupportFragmentManager 파도타기 Fragment의 BackStack 과정에 대해 알아보다가 supportFragmentManager는 어떤 과정으로 사용이되는거지...? 싶어서 알아본 supportFragmentManager 일단 Fragment를 사용하다보면 supportFragmentManager.beginTransaction() 위와 같은 코드를 굉장히 많이 사용했는데 어떻게 FragmentManager가 동작하는지 알고싶었음.. [0] SupportFragmentManager Activity와 관련있는 (Activity 위에서 사용 될) Fragment를 위해 상호작용을 목적으로 하는 FragmentManager를 생성한 후 조작을 가능케하는 역할을 함! [1] supportFragmentManager /* FragmentAct..